Как я могу найти компьютеры с LastLogonTimestamp меньше определенной даты ИЛИ пустым
Следующий код возвращает все компьютерные принципы, которые имеют дату входа в систему до 3 месяцев назад, но не получают те с нулевым значением для lastlogontimestamp
PrincipalContext context = new PrincipalContext(ContextType.Domain);
PrincipalSearchResult<ComputerPrincipal> computers = ComputerPrincipal.FindByLogonTime(context, DateTime.Now.AddMonths(-3), MatchType.LessThanOrEquals);
Как можно элегантно добавить к "компьютерам" те, которые имеют значения "lastlogontimestamp" с нулевым значением?
1 ответ
Я покончил с ComputerPrincipal.FindByLogonTime, так как он не может найти нулевой LogonTime и пошел со старой классикой, DirectorySearcher
DirectorySearcher Computersearcher = new DirectorySearcher
{
SearchRoot = new DirectoryEntry(baseOU),
Filter = "(&(whenCreated<=" + WhenCreated + ")(!(userAccountControl=2))(|(lastLogonTimestamp<=" + DateInt + ")(lastLogonTimestamp=0))(objectClass=computer))",
SearchScope = SearchScope.Subtree,
PageSize = 1000,
Sort = new SortOption("Name", SortDirection.Ascending)
};
SearchResultCollection ComputerResults = Computersearcher.FindAll();
}
Это имеет неприятный побочный эффект, что наблюдаемая коллекция, которую я использовал для создания, больше не отображает Имя в моем списке WPF (несмотря на настройку DisplayNamePath).
Совершенно новый вопрос, но текущий "решен"