Windows Script Host + Active Directory – Parte 2

Y continuando con los Scripts para administrar el Active Directory en Windows Server 2008; recordemos un poco de programación: Para ejecutar un Query a una base de datos, primero necesitamos conectarnos a dicha base mediante algún driver, en este caso va del siguiente modo:

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

Ahora que tenemos la conexión operativa, en este ejemplo modificaremos el campo de “Compañía” a todos los usuarios de una Unidad Organizativa específica:


nom=Inputbox("Ingresar OU Principal:")
objCommand.CommandText = _
 ";" & _
 "(&(objectCategory=person)(objectClass=user));" & _
"ADsPath;onelevel"

En otros websites tal vez encuentren una forma de emplar “Querys” más “puros” [Referidos a que si tienen Select * From .... ]. En este caso emplearemos una forma que en lo personal me pareció más interesante, estas lineas especifican la ubicación [<LDAP>] finalizando con un punto y coma “;” seguido de las propiedades; además ese “onelevel” se refiere a que tanto va a recorrer el script en cuestión de niveles, si deseamos que vaya por toda la ramificación reemplazamos por un “subtree”.

Ejecutamos el comando asignando los resultados a objRecordSet:

Set objRecordSet = objCommand.Execute

Mientras que existan elementos en el objRecordset, declaramos la ruta [LDAP] empleando un “string” referido al ADsPath [ver objCommand.CommandText] Seteamos un objUser, obteniendo la ruta mediante un GetObject(strADsPath) // Lo que normalmente definimos como Set objDomain=GetObject(“LDAP://dc=ifxperu, dc=com”) // Ahora viene la edición masiva! usando a objUser.Put y para guardar no olvidar el SetInfo.
Otro detalle importante para que continue el recorrido es emplear el objRecordSet.MoveNext Wend, sirve para terminar con el bucle del While Not…. Mostramos la cantidad de cuentas eliminadas asociando un contador al objRecordSet y finalmente cerramos la conexión como debe de ser!


While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
objUser.Put "company", "IFXPeru Company"
objUser.SetInfo
objRecordset.MoveNext
Wend

Wscript.Echo objRecordSet.RecordCount & " Cuentas modificadas!"

objConnection.Close

Que tengan un buen día, saludos!

Referencias: Microsoft Technet Script Center