Enumerar o enumerar todas las instancias de un recurso
El método Session.Enumerate es el enfoque de administración remota de Windows para obtener todas las instancias de un recurso especificado.
El método Session.Enumerate no obtiene una colección en un objeto SWbemObjectSet como una llamada SWbemService.ExecQuery con una consulta WMI como parámetro (por ejemplo, ExecQuery("SELECT * from Win32_LogicalDisk")
) o una llamada a un método como SWbemObject.Instances_.
Session.Enumerate y los métodos de objeto Enumerator son mucho más similares al funcionamiento del objeto TextStream de scripting que se usa para leer archivos como una secuencia.
Para leer archivos como una secuencia de texto, debe crear el objeto TextStream de scripting y llamar al método TextStream.Readline para leer cada línea del archivo. De forma similar, puede llamar al método Session.Enumerate para obtener un objeto Enumerator y llamar al método Enumerator.ReadItem para obtener el siguiente elemento. Como es el caso al leer desde el archivo de texto, puede llamar a la propiedad Enumerator.AtEndOfStream para comprobar si ha llegado al final de los elementos de datos.
Para enumerar un recurso
Crear una sesión.
Const RemoteComputer = "servername.domain.com" Set objWsman = CreateObject( "WSMan.Automation" ) Set objSession = objWsman.CreateSession( "https://" _ & RemoteComputer )
Construya el URI para identificar el recurso.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_ "wmi/root/cimv2/Win32_ScheduledJob"
Llame al método Session.Enumerate . Esta llamada inicia una enumeración. En WinRM, una operación de enumeración no obtiene una colección de la misma manera que WMI. En su lugar, el método Session.Enumerate establece un contexto de enumeración de protocolo WS-Management que se mantiene en el objeto Enumerador .
Set EnumJobs = objSession.Enumerate( strResource )
Llame al método Enumerator.ReadItem para obtener el siguiente elemento de los resultados. En WS-Management protocolo, esto corresponde a la operación de extracción. Use el método Enumerator.AtEndOfStream como control para saber cuándo detener la lectura.
While Not EnumJobs.AtEndOfStream NumOfJobs = NumOfJobs + 1 DisplayOutput( EnumJobs.ReadItem ) Wend
En el siguiente ejemplo de código de VBScript se muestra el script completo.
Const RemoteComputer = "servername.domain.com"
Set objWsman = CreateObject( "WSMan.Automation" )
Set objSession = objWsman.CreateSession( "https://" & RemoteComputer )
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_
"wmi/root/cimv2/Win32_ScheduledJob"
Set EnumJobs = objSession.Enumerate( strResource )
NumOfJobs = 0
While Not EnumJobs.AtEndOfStream
NumOfJobs = NumOfJobs + 1
DisplayOutput( EnumJobs.ReadItem )
Wend
Wscript.Echo "There are " & NumOfJobs & " jobs scheduled."
'****************************************************
' Displays WinRM XML message using built-in XSL
'****************************************************
Sub DisplayOutput( strWinRMXml )
Dim xmlFile, xslFile
Set xmlFile = CreateObject( "MSXml2.DOMDocument.3.0" )
Set xslFile = CreateObject( "MSXml2.DOMDocument.3.0" )
xmlFile.LoadXml( strWinRMXml )
xslFile.Load( "WsmTxt.xsl" )
Wscript.Echo xmlFile.TransformNode( xslFile )
End Sub
Temas relacionados