Ich würde nicht unbedingt vertrauen Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
, da es auch für mich keine verlässlichen Ergebnisse liefert, aber ich kann derzeit auch nicht direkt mit meinem PDCe Kontakt aufnehmen. Um die besten Ergebnisse zu erzielen, sollten Sie Ihren PDC-Emulator direkt ansprechen, da er immer die aktuellsten Informationen zu Kontosperrungen in der gesamten Domäne enthält.
Ich wette, dass Sie hier eine Verzögerung bei der Replikation feststellen:
... Die Kontosperrung wird dringend auf den Emulator der primären Domänencontroller-Emulatorrolle (PDC) repliziert und dann dringend auf Folgendes repliziert:
• Domänencontroller in derselben Domäne, die sich am selben Standort wie der PDC-Emulator befinden.
• Domänencontroller in derselben Domäne, die sich am selben Standort befinden wie der Domänencontroller, der die Kontosperrung durchgeführt hat.
• Domänencontroller in derselben Domäne, die sich an Standorten befinden, die so konfiguriert wurden, dass Änderungsbenachrichtigungen zwischen Standorten (und daher eine dringende Replikation) mit dem Standort, der den PDC-Emulator enthält, oder mit dem Standort, an dem die Kontosperrung durchgeführt wurde, möglich sind. Diese Sites umfassen alle Sites, die in demselben Site-Link wie die Site enthalten sind, die den PDC-Emulator enthält, oder in demselben Site-Link wie die Site, die den Domänencontroller enthält, der die Kontosperrung durchgeführt hat.
Wenn die Authentifizierung auf einem anderen Domänencontroller als dem PDC-Emulator fehlschlägt, wird die Authentifizierung außerdem auf dem PDC-Emulator wiederholt. Aus diesem Grund sperrt der PDC-Emulator das Konto vor dem Domänencontroller, der den Versuch mit einem fehlgeschlagenen Kennwort ausgeführt hat, wenn der Schwellenwert für einen Versuch mit einem fehlerhaften Kennwort erreicht ist. Weitere Informationen dazu, wie der Eigentümer der PDC-Emulatorrolle Kennwortänderungen und Kontosperrungen verwaltet, finden Sie unter "Verwalten flexibler Single-Master-Vorgänge" in diesem Handbuch.
Versuchen Sie also herauszufinden, Search-ADAccount -LockedOut -Server DC-PDCE
ob Ihre Ergebnisse besser sind.
Beachten Sie beim Erstellen von Abfragen um das lockoutTime-Attribut Folgendes:
Dieser Attributwert wird nur zurückgesetzt, wenn das Konto erfolgreich angemeldet wurde. Dies bedeutet, dass dieser Wert möglicherweise nicht Null ist, das Konto jedoch nicht gesperrt ist. Um genau zu bestimmen, ob das Konto gesperrt ist, müssen Sie die Sperrdauer zu dieser Zeit hinzufügen und das Ergebnis mit der aktuellen Zeit vergleichen, wobei lokale Zeitzonen und Sommerzeit berücksichtigt werden.
Bearbeiten: Durch Reverse Engineering Microsoft.ActiveDirectory.Management.dll
kann ich Ihnen sagen, dass Search-ADAccount -LockedOut
, was mir ziemlich zuverlässige Ergebnisse zu liefern scheint, der folgende Code ausgeführt wird:
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);
Es Search-ADAccount -LockedOut
sieht also so aus, als würde auch das AccountLockoutTime-Attribut betrachtet!
Bearbeiten Sie noch mehr für große Gerechtigkeit: Richard Mueller, Dir. Services MVP sagt dies:
Sie können das userAccountControl-Attribut nicht verwenden, um gesperrte Benutzer zu identifizieren. Hierfür ist ein bisschen userAccountControl dokumentiert, das jedoch nicht verwendet wird.
Ich kann dies folgendermaßen überprüfen:
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
Abschließend möchte ich auf diesen Blog-Beitrag zum Thema eingehen , in dem erklärt wird, warum sich das lockoutTime>=1
der besten Lösung nähert, aber das ist nur ein Teil der Geschichte. Sie müssen die Liste weiter filtern, um nur die Benutzer einzuschließen, deren LockoutTime in der Vergangenheit länger als $ (Ihre Domain-Lockout-Dauer) Minuten war.