Auflisten oder Auflisten aller Instanzen einer Ressource
Die Session.Enumerate-Methode ist der Windows-Remoteverwaltungsansatz zum Abrufen aller Instanzen einer angegebenen Ressource.
Die Session.Enumerate-Methode ruft keine Auflistung in einem SWbemObjectSet-Objekt wie einen SWbemService.ExecQuery-Aufruf mit einer WMI-Abfrage als Parameter (z. B ExecQuery("SELECT * from Win32_LogicalDisk")
. ) oder einen Aufruf einer Methode wie SWbemObject.Instances_ ab.
Session.Enumerate und die Enumerator-Objektmethoden ähneln dem Vorgang des TextStream-Skriptobjekts, das zum Lesen von Dateien als Stream verwendet wird.
Um Dateien als Textstream zu lesen, müssen Sie das TextStream-Skriptobjekt erstellen und die TextStream.Readline-Methode aufrufen, um jede Zeile der Datei zu lesen. Auf ähnliche Weise können Sie die Session.Enumerate-Methode aufrufen, um ein Enumerator-Objekt zu erhalten, und die Enumerator.ReadItem-Methode aufrufen, um das nächste Element abzurufen. Wie beim Lesen aus der Textdatei können Sie die Enumerator.AtEndOfStream-Eigenschaft aufrufen, um zu überprüfen, ob das Ende der Datenelemente erreicht ist.
So listen Sie eine Ressource auf
Erstellen Sie eine Sitzung.
Const RemoteComputer = "servername.domain.com" Set objWsman = CreateObject( "WSMan.Automation" ) Set objSession = objWsman.CreateSession( "https://" _ & RemoteComputer )
Erstellen Sie den URI, um die Ressource zu identifizieren.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/" &_ "wmi/root/cimv2/Win32_ScheduledJob"
Rufen Sie die Session.Enumerate-Methode auf . Mit diesem Aufruf wird eine Enumeration gestartet. In WinRM ruft ein Enumerationsvorgang keine Auflistung auf die gleiche Weise wie WMI ab. Stattdessen richtet die Session.Enumerate-Methode einen WS-Management Protokollaufzählungskontext ein, der im Enumerator-Objekt verwaltet wird.
Set EnumJobs = objSession.Enumerate( strResource )
Rufen Sie die Enumerator.ReadItem-Methode auf, um das nächste Element der Ergebnisse abzurufen. In WS-Management Protokoll entspricht dies dem Pullvorgang. Verwenden Sie die Enumerator.AtEndOfStream-Methode als Steuerelement, um zu ermitteln, wann das Lesen beendet werden soll.
While Not EnumJobs.AtEndOfStream NumOfJobs = NumOfJobs + 1 DisplayOutput( EnumJobs.ReadItem ) Wend
Das folgende VBScript-Codebeispiel zeigt das vollständige Skript.
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
Zugehörige Themen