Hace poco descubrí una herramienta de script muy útil para todos los que tengamos Active Directory. Esta es una herramienta gratuita de Microsoft llamada ADSI Scriptomatic. ADSI sin las siglas de Active Directory Services Interfaces. Una vez descargado y descomprimido copiamos su ejecutable dentro de la carpeta Windows y ya podemos comenzar a utilizarlo.
Con Sriptomatic podemos arrancar un Wizard que nos escribe el código necesario en Windwos Script Host necesario para acceder a los objetos del LDAP del Active Directory. Podemos hacer cuatro operaciones basicas: crear un objeto, borrarlo, leerlo o modificarlo. Estas cuatro operaciones las podemos hacer sobre otros cinco objetos: usuario, computadores, impresoras, grupos o unidades organizativas.
Si queremos leer los datos de un usuario llamado "test" dentro de la unidad organizativa "central", seleccionariamos del Wizard "leer" y "usuario".
Al final solo tenemos que modificar el código segun nuestras necesidades:
strContainer = "ou=Central"
strName = "test"
On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
Set objItem = GetObject("LDAP://" & _
objRootDSE.Get("defaultNamingContext"))
Else
Set objItem = GetObject("LDAP://cn=" & strName & "," & strContainer & "," & _
objRootDSE.Get("defaultNamingContext"))
End If
strname = objItem.Get("name")
WScript.Echo "usuario: " & strname
strtelephoneNumber = objItem.Get("telephoneNumber")
WScript.Echo "telefono: " & strtelephoneNumber
strmail = objItem.Get("mail")
WScript.Echo "correo: " & strmail
El ejemplo anterior consulta el usuario "test" y muestra por pantalla su nombre de usuario, telefono y dirección de correo. Aun no he utilizado Scriptomatic pero se me ocurre poder utilizarlo para automatizar el alta y baja de usuarios del Active Directory de forma automática.
Podemos ir más lejos. Tambien existe el Scriptomatic Version 2 (sin el ADSI delante) que funciona y se instala de la misma manera pero que nos da la posibilidad de acceder a cualquien objeto WMI de Windows (procesos, usuario, espacio en disco, red, politicas...) y todo con lenguaje de script.
Supongamos que queremos tener tener un listado de los trabajos que hay pendientes en la impresora. Desde Scriptomatic Version 2 seleccionamos en "WMI Namespaces" la opción root\CIMV2 y el "WMI Class" seleccionamos Win32_PrinJob.
Obtendremos un código como este:
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
arrComputers = Array("MI_SERVIDOS")
For Each strComputer In arrComputers
WScript.Echo
WScript.Echo "=========================================="
WScript.Echo "Computer: " & strComputer
WScript.Echo "=========================================="
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PrintJob", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "Caption: " & objItem.Caption
WScript.Echo "DataType: " & objItem.DataType
WScript.Echo "Description: " & objItem.Description
WScript.Echo "Document: " & objItem.Document
WScript.Echo "DriverName: " & objItem.DriverName
WScript.Echo "ElapsedTime: " & WMIDateStringToDate(objItem.ElapsedTime)
WScript.Echo "HostPrintQueue: " & objItem.HostPrintQueue
WScript.Echo "InstallDate: " & WMIDateStringToDate(objItem.InstallDate)
WScript.Echo "JobId: " & objItem.JobId
WScript.Echo "JobStatus: " & objItem.JobStatus
WScript.Echo "Name: " & objItem.Name
WScript.Echo "Notify: " & objItem.Notify
WScript.Echo "Owner: " & objItem.Owner
WScript.Echo "PagesPrinted: " & objItem.PagesPrinted
WScript.Echo "Parameters: " & objItem.Parameters
WScript.Echo "PrintProcessor: " & objItem.PrintProcessor
WScript.Echo "Priority: " & objItem.Priority
WScript.Echo "Size: " & objItem.Size
WScript.Echo "StartTime: " & WMIDateStringToDate(objItem.StartTime)
WScript.Echo "Status: " & objItem.Status
WScript.Echo "StatusMask: " & objItem.StatusMask
WScript.Echo "TimeSubmitted: " & WMIDateStringToDate(objItem.TimeSubmitted)
WScript.Echo "TotalPages: " & objItem.TotalPages
WScript.Echo "UntilTime: " & WMIDateStringToDate(objItem.UntilTime)
WScript.Echo
Next
Next
Function WMIDateStringToDate(dtmDate)
WScript.Echo dtm:
WMIDateStringToDate = CDate(Mid(dtmDate, 5, 2) & "/" & _
Mid(dtmDate, 7, 2) & "/" & Left(dtmDate, 4) _
& " " & Mid (dtmDate, 9, 2) & ":" & Mid(dtmDate, 11, 2) & ":" & Mid(dtmDate,13, 2))
End Function
Microsoft también habla Logonomatic (scripts de inicio de session en Windows) y de Eventomatic (scripts para acceder al visor de sucesos de Windows) pero no he encontrado información y parece ser solo proyectos futuros del grupo de programadores de scripting de Microsot.
0 comentarios:
hacer un comentario en esta entrada