Enumerazione o elenco di tutte le istanze di una risorsa
Il metodo Session.Enumerate è l'approccio di Gestione remota di Windows per ottenere tutte le istanze di una risorsa specificata.
Il metodo Session.Enumerate non ottiene una raccolta in un oggetto SWbemObjectSet come una chiamata SWbemService.ExecQuery con una query WMI come parametro (ad esempio, ExecQuery("SELECT * from Win32_LogicalDisk")
), o una chiamata a un metodo come SWbemObject.Instances_.
Session.Enumerate e i metodi dell'oggetto Enumeratore sono molto più simili all'operazione dell'oggetto TextStream di scripting usato per la lettura di file come flusso.
Per leggere i file come flusso di testo, è necessario creare l'oggetto TextStream di scripting e chiamare il metodo TextStream.Readline per leggere ogni riga del file. In modo analogo, è possibile chiamare il metodo Session.Enumerate per ottenere un oggetto Enumeratore e chiamare il metodo Enumerator.ReadItem per ottenere l'elemento successivo. Come accade quando si legge dal file di testo, è possibile chiamare la proprietà Enumerator.AtEndOfStream per verificare se è stata raggiunta la fine degli elementi di dati.
Per enumerare una risorsa
Crea una sessione.
Const RemoteComputer = "servername.domain.com" Set objWsman = CreateObject( "WSMan.Automation" ) Set objSession = objWsman.CreateSession( "https://" _ & RemoteComputer )
Costruire l'URI per identificare la risorsa.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_ "wmi/root/cimv2/Win32_ScheduledJob"
Chiamare il metodo Session.Enumerate . Questa chiamata avvia un'enumerazione. In WinRM un'operazione di enumerazione non ottiene una raccolta nello stesso modo in cui WMI esegue. Il metodo Session.Enumerate stabilisce invece un contesto di enumerazione del protocollo WS-Management gestito nell'oggetto Enumerator .
Set EnumJobs = objSession.Enumerate( strResource )
Chiamare il metodo Enumerator.ReadItem per ottenere l'elemento successivo dei risultati. Nel protocollo WS-Management corrisponde all'operazione pull. Usare il metodo Enumerator.AtEndOfStream come controllo per sapere quando interrompere la lettura.
While Not EnumJobs.AtEndOfStream NumOfJobs = NumOfJobs + 1 DisplayOutput( EnumJobs.ReadItem ) Wend
Nell'esempio di codice VBScript seguente viene illustrato lo 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
Argomenti correlati