Script VBS: Realizar consulta dentro del A.D. en busqueda de Clusters/nodos y listar Espacio Total, FRee, Description , etc
-
martes, 13 de diciembre de 2011 15:12
Hola Chic@s
Estoy haciendo un script VBS para realizar consultas en distintos dominios como subdominios pero no consigo mas bien no se como ponerle dicha variable, es decir no quiero estar modificando el script e editar manualmente el dominio y despues lanzarlo, al ejecutarlo en el A.D. que reconozca el dominio y que realice la busquedas en la propia BBDD del mismo dominio o subdominio donde se esta ejecutando.
En principio quiero que busque todos los Clusters que hay en el dominio, una vez que los encuentra que liste todos los nodos y a su vez que liste la info de los discos que tiene tanto locales como de red o de cabina, info como de capacidad total, espacio ocupado, espacio libre, Descripcion, etc.
Yo hice uno pero no consigo afinarlo. Aqui os dejo las lineas del Script:
=============================================================================================
On error resume next Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const wbemFlagReturnImmediately = &h10 Const wbemFlagForwardOnly = &h20 Const ADS_SCOPE_SUBTREE = 2 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile("c:\temp\Cluster2008.txt", ForAppending, True) Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = ("ADsDSOObject") objConnection.Open "Active Directory Provider" objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE objCommand.CommandText = "SELECT Name FROM " & "'LDAP://DC=subdominio,DC=dominio,DC=com'" & " WHERE objectClass='computer' AND " & " operatingSystem = 'Windows Server® 2008 Enterprise' OR " & " operatingSystem = 'Windows 2000 Server' OR " & " operatingSystem = 'Windows Server 2003' OR " & " operatingSystem = 'Windows Server 2008 R2 Enterprise'" Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst Do Until objRecordSet.EOF Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate," & "authenticationLevel=pktPrivacy}!" & "\\" & objRecordSet.Fields("Name").Value & "\root\mscluster") If Err<>0 then 'Ts.WriteLine objRecordSet.Fields("Name").Value & " No se puede conectar con la maquina" 'WSCRIPT.ECHO "FALLO CONEXION" Else Set colItems2 = objWMIService.ExecQuery("Select * from MSCluster_Cluster") 'wscript.echo objRecordSet.Fields("Name").Value For Each objItem2 in colItems2 IF ISNULL(objItem2.Name) THEN 'WSCRIPT.ECHO "NULO" ELSE 'wscript.echo objRecordSet.Fields("Name").Value Ts.WriteLine "Nombre del cluster: " & objItem2.Name & "NODO: " & objRecordSet.Fields("Name").Value Ts.WriteLine "########################################################" Set objWMIService2 = GetObject("winmgmts:\\" & objRecordSet.Fields("Name").Value & "\root\cimv2") Set colDisks = objWMIService2.ExecQuery ("Select * from Win32_LogicalDisk where DriveType = 3") For Each objDisk in colDisks iSpc =INT(objDisk.FreeSpace/1073741824) ispc1 = int(objDisk.size/1073741824) ispc2 = objDisk.DeviceID Ts.WriteLine "Espacio Total: " & ispc1 & " --Espacio libre: " & iSpc & "--UNidad: " & ispc2 'Ts.WriteLine "Espacio libre " & iSpc & "Capacidad " & ispc1 & " DeviceID" & ispc2 Next 'wscript.echo "salgo de disco" END IF Next 'wscript.echo "salgo de cluster" End IF objRecordSet.MoveNext Err.clear loop wscript.echo "finalizado"=============================================================================================Os agradeceria si me podrias ayudar con este temita....
Un Saludo Daniel Oprea- Editado Daniel Oprea martes, 13 de diciembre de 2011 15:14
Todas las respuestas
-
martes, 13 de diciembre de 2011 15:31Moderador
Si lo que quieres es recibir el nombre del dominio como parámetro, puedes hacerlo con parámetros por posición o por nombre. Por posición, si por ejemplo al parámetro le llamas "Dominio" y recibe el FQDN del dominio (en tu ejemplo subdominio.dominio.com), consultarías así el parámetro:
'Obtenemos el FQDN del dominio desde el parámetro str_Dominio = WScript.Arguments.Named("Dominio") 'Obtenemos el nombre distinguido del dominio str_DnDominio = "DC=" & Join(Split(str_Dominio,"."),",DC=")
Esto mismo se puede realizar con parámetro por posición; supongamos que sólo se recibe ese parámetro, su posición será cero:'Obtenemos el FQDN del dominio desde el parámetro str_Dominio = WScript.Arguments.Unnamed(0) 'Obtenemos el nombre distinguido del dominio str_DnDominio = "DC=" & Join(Split(str_Dominio,"."),",DC=")
Para más detalle sobre los parámetros en VbScript:Trabajar Con Argumentos En VBScript
http://freyes.svetlian.com/vbscript-argumentos.htm
Un saludo
Fernando Reyes [MS MVP]
MCSA 2000/2003
MCSE 2000/2003
MCITP EnterpriseAdministrator
Web: http://freyes.svetlian.com
Blog: http://urpiano.wordpress.com
RSS: http://urpiano.wordpress.com/feed/
freyes.champú@champú.mvps.org
(Aclárate la cabeza si quieres escribirme)
- Editado Fernando ReyesMicrosoft Community Contributor, Moderator miércoles, 14 de diciembre de 2011 7:15
- Marcado como respuesta Daniel Oprea lunes, 19 de diciembre de 2011 11:08
-
lunes, 19 de diciembre de 2011 11:08
Muchas Gracias Fernando, es justo lo que queria.
Un Saludo.
Un Saludo Daniel Oprea

