viernes, 27 de julio de 2012

[Solucionado] Desbloquear todos los usuarios bloqueados del servidor de dominio (Active Directory)

Si trabajas en una organización grande es común que un lunes en la mañana te llamen los usuarios indicando que bloquearon la contraseña para ingresar a su PC, por lo que hay que proceder a desbloquear el usuario y en menos de 5 minutos llama otro usuario indicando lo mismo. En otras ocasiones puede tratarse de una pesadilla de un virus como el Conficker que masivamente bloquea usuarios usuarios del dominio y queremos desbloquearlos a la brevedad mientras se investiga el origen del problema.

Existe un Visual Basic Script creado por Mohammed Alyafae (MCSE 2003 MCSA 2003 Messaging MCP CCNA MCTS 2008 Active Directory Configuration MCTS 2008 Network Infrastructure Configuration MCTS 2008 Application Infrastructure Configuration ITIL Network +) de Yemén, el cual permite desbloquear masivamente usuarios del dominio y es perfectamente compatible con: Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows 7, Windows Vista, Windows XP.

¿Cómo desbloquear usuarios masivamente del Directorio Activo (Active Directory)?
1. Abrir el Block de Notas (también llamado notepad).
2. Copie y pegue el siguiente script dentro del Block de Notas:
'==========================================================
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 2009 
' NAME: Unlock User accounts 
' AUTHOR: Mohammed Alyafae ,  
' DATE  : 9/22/2011 
' COMMENT: this script is to search for locked accounts and unlock them  
'==========================================================
Option Explicit 
On Error Resume Next 
Dim oQuery 
Dim objConnection 
Dim objCommand 
Dim objRecordSet 
Dim objUser 
Dim objRoot 
Dim NamingContext 
 
set objRoot = getobject("LDAP://RootDSE") 
NamingContext = objRoot.get("defaultNamingContext") 
oQuery = ";" & "(objectClass=user);adspath;subtree" 
 
'=======all the following lines are the same for every script==================== 
Set objConnection = CreateObject("ADODB.Connection") 
Set objCommand = CreateObject("ADODB.Command") 
objConnection.Open "Provider=ADsDSOObject;" 
objCommand.ActiveConnection = objConnection 
objCommand.CommandText = oQuery 
Set objRecordSet = objCommand.Execute 
'================================= 
 
While Not objRecordSet.EOF 
 
Set objUser=GetObject(objRecordSet(0)) 
 
If objUser.Isaccountlocked=True Then 
    WScript.Echo objRecordSet(0) 
    objUser.IsAccountLocked=False 
    objUser.SetInfo 
End If 
objRecordSet.MoveNext 
 
Wend 
 
objConnection.Close 
Set objUser=Nothing 

3. Guarde el archivo como Unlockaccounts.vbs
4. Ejecútelo con usuario que tenga los privilegios adecuados para desbloquear usuarios en el Dominio o usarlo desde el servidor de Active Directory de su empresa.

Cada vez que desbloquea un usuario aparecerá un mensaje indicando que usuario ha desbloqueado, si usted lo va a utilizar con el programador de tareas de Windows para que la tarea desbloquee los usuarios cada cierto tiempo, debe eliminar la línea que indica: WScript.Echo objRecordSet(0).

El script puede descargarselo directamente de la página de Microsoft desde aquí: http://gallery.technet.microsoft.com/scriptcenter/Unlock-User-accounts-48494fba/file/44315/1/Unlockaccounts.vbs

Existe una variante creada por el mismo autor, donde desbloquea el usuario, crea un archivo en C:\unLockedUsers.Log con el listado de usuarios desbloqueados, asigna la contraseña P@ssword y que obliga a cambiarla en el próximo inicio de sesión. NO UTILIZAR ESTE SCRIPT CON UNA TAREA PROGRAMADA: no se recomienda utilizar este script con una tarea programada, dado que un hacker o cualquier empleado puede ingresar al computador de alguien fácilmente si sabe que este script lo utilizan con una tarea programada.
Option Explicit
On Error Resume Next
Dim oQuery
Dim objConnection
Dim objCommand
Dim objRecordSet
Dim objUser
Dim objRoot
Dim objLogfile
Dim objFSO
Dim NamingContext
Dim strPassword


Const LOGFILE = "C:\unLockedUsers.Log"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogfile = objFSO.CreateTextFile(LOGFILE,True)

strPassword="P@ssword"

set objRoot = getobject("LDAP://RootDSE")
NamingContext = objRoot.get("defaultNamingContext")
oQuery = ";" & "(objectClass=user);adspath;subtree"

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Open "Provider=ADsDSOObject;"
objCommand.ActiveConnection = objConnection
objCommand.CommandText = oQuery
Set objRecordSet = objCommand.Execute

While Not objRecordSet.EOF

Set objUser=GetObject(objRecordSet(0))

If objUser.Isaccountlocked=True Then
'WScript.Echo objRecordSet(0)
objUser.IsAccountLocked=False
objUser.SetPassword strPassword
objUser.Put "PwdLastSet", 0 
objUser.SetInfo
UpdateLogFile  objRecordSet(0)
End If
objRecordSet.MoveNext

Wend

objConnection.Close
Set objUser=Nothing

Sub UpdateLogFile(szMsg)
objLogfile.WriteLine  "Unclocked account   " & szMsg
objLogfile.WriteLine
End Sub