Enumerando ou listando todas as instâncias de um recurso

O método Session.Enumerate é a abordagem de Gerenciamento Remoto do Windows para obter todas as instâncias de um recurso especificado.

O método Session.Enumerate não obtém uma coleção em um objeto SWbemObjectSet como uma chamada SWbemService.ExecQuery com uma consulta WMI como um parâmetro (por exemplo, ExecQuery("SELECT * from Win32_LogicalDisk")), ou uma chamada para um método como SWbemObject.Instances_. Session.Enumerate e os métodos de objeto Enumerator são muito mais semelhantes à operação do objeto TextStream de script que é usado para ler arquivos como um fluxo.

Para ler arquivos como um fluxo de texto, você deve criar o objeto TextStream de script e chamar o método TextStream.Readline para ler cada linha do arquivo. Da mesma forma, você pode chamar o método Session.Enumerate para obter um objeto Enumerador e chamar o método Enumerator.ReadItem para obter o próximo item. Como é o caso ao ler do arquivo de texto, você pode chamar a propriedade Enumerator.AtEndOfStream para marcar para saber se você chegou ao final dos itens de dados.

Para enumerar um recurso

  1. Criar uma sessão.

    Const RemoteComputer = "servername.domain.com"
    Set objWsman = CreateObject( "WSMan.Automation" )
    Set objSession = objWsman.CreateSession( "https://" _
        & RemoteComputer )
    
  2. Construa o URI para identificar o recurso.

    strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_
                 "wmi/root/cimv2/Win32_ScheduledJob"
    
  3. Chame o método Session.Enumerate . Essa chamada inicia uma enumeração. No WinRM, uma operação de enumeração não obtém uma coleção da mesma maneira que o WMI. Em vez disso, o método Session.Enumerate estabelece um contexto de enumeração de protocolo WS-Management mantido no objeto Enumerador .

    Set EnumJobs = objSession.Enumerate( strResource )
    
  4. Chame o método Enumerator.ReadItem para obter o próximo item dos resultados. No protocolo WS-Management, isso corresponde à operação de pull. Use o método Enumerator.AtEndOfStream como um controle para saber quando parar de ler.

    While Not EnumJobs.AtEndOfStream
        NumOfJobs = NumOfJobs + 1
        DisplayOutput( EnumJobs.ReadItem ) 
    Wend
    

O exemplo de código VBScript a seguir mostra o 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

Sobre o Gerenciamento Remoto do Windows

Usando o Gerenciamento Remoto do Windows

Referência de gerenciamento remoto do Windows