Я не обязательно буду доверять Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
, так как это также не даст мне надежных результатов, но в то же время я также не могу напрямую связаться с моим PDCe. Для достижения наилучших результатов вы бы хотели напрямую ориентироваться на ваш эмулятор PDC, поскольку он всегда содержит самую свежую информацию о блокировках учетных записей по всему домену.
Я держу пари, что вы стали свидетелями отсрочки репликации:
... блокировка учетной записи срочно реплицируется владельцу роли эмулятора основного контроллера домена (PDC), а затем срочно реплицируется на следующее:
• Контроллеры домена в том же домене, которые расположены на том же сайте, что и эмулятор PDC.
• Контроллеры домена в том же домене, которые расположены на том же сайте, что и контроллер домена, который обрабатывал блокировку учетной записи.
• Контроллеры домена в том же домене, которые расположены на сайтах, настроенных для разрешения уведомлений об изменениях между сайтами (и, следовательно, срочной репликацией) с сайтом, который содержит эмулятор PDC, или с сайтом, где была обработана блокировка учетной записи. Эти сайты включают любой сайт, который включен в ту же ссылку на сайт, что и сайт, содержащий эмулятор PDC, или в ту же ссылку на сайт, что и сайт, который содержит контроллер домена, который обрабатывал блокировку учетной записи.
Кроме того, при сбое аутентификации на контроллере домена, отличном от эмулятора PDC, аутентификация повторяется на эмуляторе PDC. По этой причине эмулятор PDC блокирует учетную запись до того, как контроллер домена, обработавший попытку неудачного пароля, достигнет порогового значения попытки неверного пароля. Для получения дополнительной информации о том, как владелец роли эмулятора PDC управляет изменениями пароля и блокировками учетных записей, см. «Управление гибкими операциями с одним мастером» в этой книге.
Так что попробуйте Search-ADAccount -LockedOut -Server DC-PDCE
и посмотрите, если ваши результаты лучше.
Кроме того, вот что еще нужно учитывать при построении запросов вокруг атрибута lockoutTime:
Значение этого атрибута сбрасывается только после успешного входа в учетную запись. Это означает, что это значение может быть ненулевым, но учетная запись не заблокирована. Чтобы точно определить, заблокирована ли учетная запись, необходимо добавить к этому времени длительность блокировки и сравнить результат с текущим временем, учитывая местные часовые пояса и переход на летнее время.
Изменить: с помощью обратного инжиниринга Microsoft.ActiveDirectory.Management.dll
, я могу сказать вам, что Search-ADAccount -LockedOut
, который, как мне кажется, дает довольно надежные результаты, выполняет следующий код:
else if ((bool) this._paramSet.LockedOut)
{
list.Add(ADAccountFactory<ADAccount>.AttributeTable[cmdletSessionInfo.ConnectedADServerType]["AccountLockoutTime"].InvokeToSearcherConverter(ADOPathUtil.CreateFilterClause(ADOperator.Ge, "AccountLockoutTime", (object) 1), cmdletSessionInfo));
this.OutputFilterFunction = new ADGetCmdletBase<SearchADAccountParameterSet, ADAccountFactory<ADAccount>, ADAccount>.OutputFilterDelegate(this.FilterIsLockedOut);
}
if (list.Count > 0)
this.OutputSearchResults(list.Count != 1 ? ADOPathUtil.CreateAndClause(list.ToArray()) : list[0]);
else
this.OutputSearchResults((IADOPathNode) null);
Похоже, что Search-ADAccount -LockedOut
он тоже смотрит на атрибут AccountLockoutTime!
Отредактируйте еще немного для большей справедливости: Ричард Мюллер, режиссёр. Служба MVP, говорит это:
Вы не можете использовать атрибут userAccountControl для идентификации заблокированных пользователей. Для этого задокументировано немного userAccountControl, но он не используется.
Я могу проверить это таким образом:
PS C:\Users\ryan> $(Search-ADAccount -LockedOut).Count
11
PS C:\Users\ryan> $(Get-ADUser -LDAPFilter "(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=16))").Count
0
Наконец, я хотел бы закончить на этом посте в блоге на эту тему , которая объясняет, почему lockoutTime>=1
приближается лучшее решение, но это только часть истории. Вам необходимо дополнительно отфильтровать список, чтобы включить только тех пользователей, у которых их время блокировки больше $ (длительности блокировки вашего домена) в прошлом.