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
Criar uma sessão.
Const RemoteComputer = "servername.domain.com" Set objWsman = CreateObject( "WSMan.Automation" ) Set objSession = objWsman.CreateSession( "https://" _ & RemoteComputer )
Construa o URI para identificar o recurso.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_ "wmi/root/cimv2/Win32_ScheduledJob"
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 )
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
Tópicos relacionados