Я запускаю очень короткий сценарий, чтобы просто распечатать всех пользователей и время их последнего входа в систему:
get-aduser -filter * -property * | ft имя, lastlogondate
Я заметил, что только небольшая группа пользователей имеет значение даты входа в систему, в то время как у подавляющего большинства оно пустое. Это активные пользователи, входящие в систему каждый день. Насколько я понимаю, lastlogondate - это своего рода псевдоним PowerShell, который преобразует значение атрибута пользователя lastlogontimestamp из большого целого числа в читаемую дату. Раньше я успешно справлялся с этим запросом, и снова он отлично работает для некоторых пользователей. Я зашел в ADSIedit и обнаружил, что у всех пользователей есть значение в lastlogontimestamp. Несмотря на это, если я напрямую запрашиваю это значение, я все равно буду пустым в PS для каждого рассматриваемого пользователя:
get-aduser -filter * -property * | ft имя, lastlogontimestamp
Такое поведение верно для всех 3 контроллеров домена в домене. Я сбит с толку. Это часть более крупного сценария, который сообщает и действует с учетными записями пользователей, которые не входили в систему более X дней, и до сегодняшнего дня работал нормально ежеквартально. Запустив его сегодня, я заметил, что очень мало пользователей отображаются в отчете как устаревшие, поэтому при устранении неполадок я включил самый простой запрос, чтобы увидеть, что он будет делать. Пустая отметка времени, возвращаемая в PowerShell, определенно неверна, и почему так мало пользователей отображаются в моем отчете как устаревшие (сценарий исключает пустые значения входа в систему), но я не знаю, почему значение в PS пустое, а значение в редакторе ADSI для конкретного пользователя определенно заполняется. Это справедливо и для нескольких других атрибутов, таких как logoncount, и только для затронутых пользователей (большинства), в то время как несколько пользователей, которые работают правильно, не имеют никаких различий между атрибутом ADSI и тем, что показывает PS.
Все 3 контроллера домена в этом примере - 2012 R2, и я заметил, что это поведение также происходит с учетными записями пользователей в меньшем смешанном домене, который у нас есть (контроллеры домена 2008 и 2012), но осталось незамеченным, потому что там почти нет пользователей, так что это не так уж много фокус.
Еще одна важная вещь: если я запускаю эту команду PS для учетных записей компьютеров Get-ADcomputer вместо Get-ADuser, у меня нет таких проблем, все компьютеры сообщают о lastlogondate правильно без пробелов.
Любая помощь, прежде чем я позвоню в Microsoft?
Ади был прав, это какая-то проблема с разрешениями. На самом деле я решил это только сейчас, когда коллега выполнил запрос и получил правильные результаты, однако он использовал свою собственную учетную запись для входа. Кроме того, он «работал от имени администратора», чтобы повысить уровень консоли PS. Когда я это сделал, все заработало правильно. Я понятия не имею, как мне никогда не приходилось делать это в прошлом, и я также являюсь администратором домена и, следовательно, локальным администратором на контроллерах домена, но неважно. Теперь он работает с повышенным запросом PS. Для записи я вошел в ADSIedit со своей обычной учетной записью и не запустил сеанс с повышенными правами ..... Странно, но я возьму это.