Non Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
mi fiderei necessariamente , dal momento che non sta nemmeno restituendo risultati affidabili per me, ma in questo momento non sono nemmeno in grado di contattare direttamente il mio PDCe. Per ottenere i migliori risultati, dovresti scegliere come target il tuo emulatore PDC, poiché contiene sempre le informazioni più aggiornate sui blocchi degli account in tutto il dominio.
Questo è quello che sto scommettendo che stai assistendo qui è un ritardo nella replica:
... il blocco dell'account viene replicato urgentemente al proprietario del ruolo dell'emulatore del controller di dominio primario (PDC) e quindi urgentemente replicato nel modo seguente:
• Controller di dominio nello stesso dominio che si trovano nello stesso sito dell'emulatore PDC.
• Controller di dominio nello stesso dominio che si trovano nello stesso sito del controller di dominio che ha gestito il blocco dell'account.
• Controller di dominio nello stesso dominio che si trovano in siti configurati per consentire la notifica di modifica tra i siti (e, quindi, la replica urgente) con il sito che contiene l'emulatore PDC o con il sito in cui è stato gestito il blocco dell'account. Questi siti includono qualsiasi sito incluso nello stesso collegamento del sito che contiene l'emulatore PDC o nello stesso collegamento del sito che contiene il controller di dominio che ha gestito il blocco dell'account.
Inoltre, quando l'autenticazione non riesce in un controller di dominio diverso dall'emulatore PDC, l'autenticazione viene ritentata nell'emulatore PDC. Per questo motivo, l'emulatore PDC blocca l'account prima del controller di dominio che ha gestito il tentativo di password non riuscita se viene raggiunta la soglia di tentativo di password errata. Per ulteriori informazioni su come il proprietario del ruolo dell'emulatore PDC gestisce le modifiche delle password e i blocchi degli account, vedere "Gestione delle operazioni Single-Master flessibili" in questo libro.
Quindi prova a Search-ADAccount -LockedOut -Server DC-PDCE
vedere se i tuoi risultati sono migliori.
Inoltre, ecco qualcos'altro da considerare quando si creano query attorno all'attributo lockoutTime:
Questo valore di attributo viene resettato solo quando l'account è connesso correttamente. Ciò significa che questo valore può essere diverso da zero, ma l'account non è bloccato. Per determinare con precisione se l'account è bloccato, è necessario aggiungere la Durata di blocco a questo orario e confrontare il risultato con l'ora corrente, tenendo conto dei fusi orari locali e dell'ora legale.
Modifica: a titolo di reverse engineering Microsoft.ActiveDirectory.Management.dll
, posso dirti che Search-ADAccount -LockedOut
, che mi sembra produrre risultati abbastanza affidabili, esegue il seguente codice:
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);
Quindi sembra che Search-ADAccount -LockedOut
stia guardando anche l'attributo AccountLockoutTime!
Modifica un po 'di più per una grande giustizia: Richard Mueller, Dir. Servizi MVP, dice questo:
Non è possibile utilizzare l'attributo userAccountControl per identificare gli utenti bloccati. C'è un po 'di userAccountControl documentato per questo, ma non viene usato.
Posso verificarlo così:
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
Infine, vorrei finire su questo post sul blog sull'argomento , che spiega perché si lockoutTime>=1
sta avvicinando la soluzione migliore, ma questa è solo una parte della storia. È necessario filtrare ulteriormente l'elenco per includere solo gli utenti in cui il loro tempo di blocco è superiore a $ (durata del blocco del dominio) minuti in passato.