Eu não confiaria necessariamente Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
, pois também não está retornando resultados confiáveis para mim, mas também não consigo entrar em contato diretamente com meu PDCe no momento. Para obter melhores resultados, você deseja segmentar diretamente seu emulador de PDC, pois ele sempre tem as informações mais atualizadas sobre bloqueios de contas em todo o domínio.
É isso que estou apostando que você está testemunhando aqui é um atraso na replicação:
... o bloqueio de conta é replicado urgentemente para o proprietário da função de emulador do controlador de domínio primário (PDC) e, em seguida, é replicado urgentemente para o seguinte:
• Controladores de domínio no mesmo domínio que estão localizados no mesmo site que o emulador PDC.
• Controladores de domínio no mesmo domínio, localizados no mesmo site que o controlador de domínio que tratou do bloqueio de conta.
• Controladores de domínio no mesmo domínio, localizados em sites que foram configurados para permitir a notificação de alterações entre sites (e, portanto, replicação urgente) no site que contém o emulador PDC ou no site em que o bloqueio da conta foi tratado. Esses sites incluem qualquer site incluído no mesmo link do site que contém o emulador de PDC ou no mesmo link do site que contém o controlador de domínio que tratou do bloqueio da conta.
Além disso, quando a autenticação falha em um controlador de domínio que não seja o emulador PDC, a autenticação é repetida no emulador PDC. Por esse motivo, o emulador PDC bloqueia a conta antes do controlador de domínio que manipulou a tentativa de falha na senha se o limite de tentativa de senha incorreta for atingido. Para obter mais informações sobre como o proprietário da função de emulador PDC gerencia alterações de senha e bloqueios de conta, consulte "Gerenciando operações flexíveis de mestre único" neste manual.
Portanto, tente Search-ADAccount -LockedOut -Server DC-PDCE
e veja se seus resultados estão melhores.
Além disso, aqui está outra coisa a considerar ao criar consultas em torno do atributo lockoutTime:
Esse valor de atributo é redefinido apenas quando a conta é conectada com êxito. Isso significa que esse valor pode ser diferente de zero, mas a conta não está bloqueada. Para determinar com precisão se a conta está bloqueada, você deve adicionar a Duração do bloqueio a esse horário e comparar o resultado com o horário atual, considerando os fusos horários locais e o horário de verão.
Edit: Por meio de engenharia reversa Microsoft.ActiveDirectory.Management.dll
, posso dizer que Search-ADAccount -LockedOut
, que me parece produzir resultados bastante confiáveis, executa o seguinte código:
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);
Parece que também Search-ADAccount -LockedOut
está olhando o atributo AccountLockoutTime!
Edite um pouco mais para obter grande justiça: Richard Mueller, Dir. Services MVP, diz o seguinte:
Você não pode usar o atributo userAccountControl para identificar usuários bloqueados. Há um pouco de userAccountControl documentado para isso, mas ele não é usado.
Eu posso verificar isso assim:
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
Por fim, gostaria de terminar nesta postagem do blog sobre o tópico , que explica por que a lockoutTime>=1
abordagem está se aproximando da melhor solução, mas isso é apenas parte da história. Você precisa filtrar ainda mais a lista para incluir apenas os usuários em que o tempo de bloqueio deles é maior que $ (duração do bloqueio de domínio) minutos no passado.