Как я могу найти компьютеры с 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).

Совершенно новый вопрос, но текущий "решен"

Другие вопросы по тегам