No necesariamente confiaría Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut, ya que tampoco me está devolviendo resultados confiables, pero tampoco puedo contactarme directamente con mi PDCe en este momento. Para obtener mejores resultados, desearía apuntar directamente a su emulador PDC, ya que siempre tiene la información más actualizada sobre bloqueos de cuentas en todo el dominio.
Es lo que estoy apostando que estás presenciando aquí es un retraso en la replicación:
... el bloqueo de cuenta se replica con urgencia al propietario del rol del emulador del controlador de dominio primario (PDC) y luego se replica con urgencia a lo siguiente:
• Controladores de dominio en el mismo dominio que se encuentran en el mismo sitio que el emulador PDC.
• Controladores de dominio en el mismo dominio que se encuentran en el mismo sitio que el controlador de dominio que manejó el bloqueo de la cuenta.
• Controladores de dominio en el mismo dominio que se encuentran en sitios que se han configurado para permitir notificaciones de cambio entre sitios (y, por lo tanto, replicación urgente) con el sitio que contiene el emulador PDC o con el sitio donde se manejó el bloqueo de la cuenta. Estos sitios incluyen cualquier sitio que esté incluido en el mismo enlace del sitio que contiene el emulador PDC o en el mismo enlace del sitio que contiene el controlador de dominio que manejó el bloqueo de la cuenta.
Además, cuando la autenticación falla en un controlador de dominio que no sea el emulador PDC, la autenticación se vuelve a intentar en el emulador PDC. Por este motivo, el emulador PDC bloquea la cuenta antes del controlador de dominio que manejó el intento de contraseña fallida si se alcanza el umbral de intento de contraseña incorrecta. Para obtener más información sobre cómo el propietario del rol del emulador PDC gestiona los cambios de contraseña y los bloqueos de cuentas, consulte "Administración de operaciones flexibles de maestro único" en este libro.
Así que intenta Search-ADAccount -LockedOut -Server DC-PDCEver si tus resultados son mejores.
Además, aquí hay algo más a tener en cuenta al generar consultas en torno al atributo lockoutTime:
Este valor de atributo solo se restablece cuando la cuenta inicia sesión correctamente. Esto significa que este valor puede ser distinto de cero, pero la cuenta no está bloqueada. Para determinar con precisión si la cuenta está bloqueada, debe agregar la duración del bloqueo a esta hora y comparar el resultado con la hora actual, teniendo en cuenta las zonas horarias locales y el horario de verano.
Editar: a modo de ingeniería inversa Microsoft.ActiveDirectory.Management.dll, puedo decirte que Search-ADAccount -LockedOut, que me parece que produce resultados bastante confiables, ejecuta el siguiente 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 también Search-ADAccount -LockedOutestá mirando el atributo AccountLockoutTime!
Edite un poco más para una gran justicia: Richard Mueller, Dir. Servicios MVP, dice esto:
No puede usar el atributo userAccountControl para identificar a los usuarios que están bloqueados. Hay un poco de userAccountControl documentado para esto, pero no se usa.
Puedo verificar esto así:
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
Finalmente, me gustaría terminar en esta publicación de blog sobre el tema , que explica por qué se lockoutTime>=1está acercando a la mejor solución, pero eso es solo una parte de la historia. Debe filtrar aún más la lista para incluir solo a los usuarios en los que su tiempo de bloqueo es superior a $ (la duración de bloqueo de su dominio) minutos en el pasado.