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: " & strmailEl 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