none
Script VBS: Realizar consulta dentro del A.D. en busqueda de Clusters/nodos y listar Espacio Total, FRee, Description , etc

    Pregunta

  • 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
    martes, 13 de diciembre de 2011 15:12

Respuestas

  • 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)

    martes, 13 de diciembre de 2011 15:31
    Moderador

Todas las respuestas

  • 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)

    martes, 13 de diciembre de 2011 15:31
    Moderador
  • Muchas Gracias Fernando, es justo lo que queria.

    Un Saludo.


    Un Saludo Daniel Oprea
    lunes, 19 de diciembre de 2011 11:08