Enumerazione o elenco di tutte le istanze di una risorsa
Il metodo Session.Enumerate è l'approccio di Gestione remota 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 a SWbemService.ExecQuery con una query WMI come parametro (per esempio, ExecQuery("SELECT * from Win32_LogicalDisk")
), o una chiamata a un metodo come SWbemObject.Instances_.
Session.Enumerate e i metodi dell'enumeratore oggetto sono molto più simili al funzionamento dello scripting oggetto TextStream utilizzato per la lettura dei file come flusso.
Per leggere i file come flusso di testo, è necessario creare lo scripting oggetto TextStream e chiamare il metodo TextStream.Readline per leggere ogni riga del file. In modo analogo, è possibile chiamare il metodoSession.Enumerate diper 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
Creare 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 fa. Invece, il metodo Session.Enumerate stabilisce un contesto di enumerazione del protocollo WS-Management che viene mantenuto 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. Utilizzare 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