Я добавил пользовательский атрибут lastLogonTime
синтаксис: UTC Coded Time
. Я добавил UserPrincipal
класс GET/SET для этого настраиваемого атрибута.Поиск Active Directory (AD LDS) по пользовательскому атрибуту DateTime
...
[DirectoryProperty("lastLogonTime")]
public DateTime? LastLogonTime
{
get
{
object[] result = this.ExtensionGet("lastLogonTime");
if (result != null && result.Count() > 0) return (DateTime?)result[0];
return null;
}
set
{
this.ExtensionSet("lastLogonTime", value);
}
}
...
Я также расширил AdvancedFilters
, чтобы иметь возможность осуществлять поиск по этому настраиваемого атрибута.
MyUserPrincipalSearch searchFilter;
new public MyUserPrincipalSearch AdvancedSearchFilter
{
get
{
if (null == searchFilter)
searchFilter = new MyUserPrincipalSearch(this);
return searchFilter;
}
}
public class MyUserPrincipalSearch: AdvancedFilters
{
public MyUserPrincipalSearch(Principal p) : base(p) { }
public void LastLogonTime (DateTime? lastLogonTime, MatchType mt)
{
this.AdvancedFilterSet("lastLogonTime", lastLogonTime.Value, typeof(DateTime?), mt);
}
}
Теперь я хотел бы поиск по всем пользователям, кто имеет lastLogonTime
менее day
.
using (PrincipalContext ctx = ADLDSUtility.Users)
{
MyUserPrincipal filter = new MyUserPrincipal(ctx);
filter.AdvancedSearchFilter.LastLogonTime((DateTime.Now - new TimeSpan(1,0,0,0,0)), MatchType.LessThan);
PrincipalSearcher ps = new PrincipalSearcher(filter);
foreach (MyUserPrincipal p in ps.FindAll())
{
//my custom code
}
}
Этот поиск не дал мне никаких результатов. У меня есть тестовые пользователи, которые не вошли в систему за последние пару дней.
Я пробовал MatchType.GreaterThan
, MatchType.Equals
. Ни один из них не возвращает никаких результатов, но есть пользователи, которые соответствуют этим критериям.
Единственный фильтр, который делает работу является
filter.AdvancedSearchFilter.LastLogonTime(DateTime.Now , MatchType.NotEquals);
Но это в основном возвращение всех пользователей. Любые идеи, почему мой результат поиска не возвращает никаких результатов?
Моя цель состоит в том, чтобы найти всех пользователей, у которых последнее время входа в систему меньше X
дней.
Я открыт для других решений, пока я получаю этих пользователей.
P.S. Я знаю способ обойти это. Пройдите через всех пользователей, получите их lastLogonTime
, а затем выполните сравнение, но это просто лишний раз за то, что я делаю.