Je ne ferais pas nécessairement confiance Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
, car cela ne me donne pas de résultats fiables non plus, mais je ne peux pas non plus contacter directement mon PDCe pour le moment. Pour de meilleurs résultats, vous souhaitez cibler directement votre émulateur PDC, car il dispose toujours des informations les plus à jour sur les verrouillages de compte dans tout le domaine.
C'est ce que je parie que vous voyez ici un retard dans la réplication:
... le verrouillage de compte est répliqué de toute urgence vers le propriétaire du rôle d'émulateur du contrôleur de domaine principal (PDC) et est ensuite répliqué de manière urgente vers les éléments suivants:
• Contrôleurs de domaine du même domaine situés sur le même site que l'émulateur PDC.
• Les contrôleurs de domaine du même domaine qui se trouvent sur le même site que le contrôleur de domaine qui a géré le verrouillage de compte.
• Les contrôleurs de domaine du même domaine qui se trouvent dans des sites qui ont été configurés pour autoriser la notification des modifications entre les sites (et, par conséquent, la réplication urgente) avec le site qui contient l'émulateur PDC ou avec le site où le verrouillage de compte a été géré. Ces sites incluent tout site inclus dans le même lien de site que le site qui contient l'émulateur PDC ou dans le même lien de site que le site qui contient le contrôleur de domaine qui a géré le verrouillage de compte.
En outre, lorsque l'authentification échoue sur un contrôleur de domaine autre que l'émulateur PDC, l'authentification est réessayée sur l'émulateur PDC. Pour cette raison, l'émulateur PDC verrouille le compte avant le contrôleur de domaine qui a géré la tentative de mot de passe ayant échoué si le seuil de tentative de mot de passe incorrect est atteint. Pour plus d'informations sur la façon dont le propriétaire du rôle d'émulateur PDC gère les modifications de mot de passe et les verrouillages de compte, voir «Gestion des opérations flexibles à maître unique» dans ce livre.
Essayez donc de Search-ADAccount -LockedOut -Server DC-PDCE
voir si vos résultats sont meilleurs.
En outre, voici autre chose à considérer lors de la création de requêtes autour de l'attribut lockoutTime:
Cette valeur d'attribut n'est réinitialisée que lorsque le compte est correctement connecté. Cela signifie que cette valeur peut être différente de zéro, mais que le compte n'est pas verrouillé. Pour déterminer avec précision si le compte est verrouillé, vous devez ajouter la durée de verrouillage à cette heure et comparer le résultat à l'heure actuelle, en tenant compte des fuseaux horaires locaux et de l'heure d'été.
Edit: En guise d'ingénierie inverse Microsoft.ActiveDirectory.Management.dll
, je peux vous dire que Search-ADAccount -LockedOut
, qui me semble produire des résultats assez fiables, exécute le code suivant:
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);
Il semble donc que l' Search-ADAccount -LockedOut
on regarde également l'attribut AccountLockoutTime!
Éditez un peu plus pour une grande justice: Richard Mueller, Dir. Services MVP, dit ceci:
Vous ne pouvez pas utiliser l'attribut userAccountControl pour identifier les utilisateurs verrouillés. Il y a un peu de userAccountControl documenté pour cela, mais il n'est pas utilisé.
Je peux le vérifier ainsi:
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
Enfin, je voudrais terminer sur ce billet de blog sur le sujet , qui explique pourquoi l' lockoutTime>=1
approche de la meilleure solution, mais ce n'est qu'une partie de l'histoire. Vous devez filtrer davantage la liste pour n'inclure que les utilisateurs dont le lockoutTime est supérieur à $ (la durée de verrouillage de votre domaine) minutes dans le passé.