Script para desbloquear usuarios del Directorio Activo
El siguiente script busca en Active Directory todos los objetos “usuario” que actualmente se encuentren lockeados por intentos fallidos de logon y los desbloquea automáticamente.
La idea es realizar una consulta a la base LDAP mediante ADODB pero obteniendo solo aquellos usuarios que esten lockeados. Para eso realizamos la consulta teniendo en cuenta dos cosas:
- Que los objetos sean USUARIOS, mediante la clausula “objectcategory=user”
- Que el tiempo de lockeo sea mayor a 1, lo que indicaría que realmente esta lockeado.
El script obtiene los usuarios lockeados y los desbloquea una vez recorriendo el recordset de principio a fin. Puede agregarse en una tarea programada para que quede corriendo indefinidamente para que no haya necesidad de que un operador desbloquee las cuentas todo el tiempo.
Const ADS_SCOPE_SUBTREE = 2Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
bjConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
bjCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT distinguishedName FROM 'LDAP://dc=domain,dc=com' WHERE _
objectCategory='user' AND lockoutTime>=1"
Set objRecordSet = objCommand.Execute
' Si el recordset esta vacio es porque no hay usuarios bloqueados.
CANTIDAD = objRecordSet.RecordCount
if CANTIDAD <> 0 then
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
DN = objRecordSet.Fields("distinguishedName").Value
set objUSER = getobject("LDAP://" & DN)
objUser.IsAccountLocked = false
objUSER.SetInfo
objRecordSet.MoveNext
loop
end if
wscript.quit