Auflisten oder Auflisten aller Instanzen einer Ressource
Die Session.Enumerate-Methode ist Windows Remoteverwaltungsansatz zum Abrufen aller Instanzen einer angegebenen Ressource.
Die Session.Enumerate-Methode erhält keine Auflistung in einem SWbemObjectSet-Objekt wie einen SWbemService.ExecQuery-Aufruf mit einer WMI-Abfrage als Parameter (z. B. ) oder einen Aufruf einer Methode wie ExecQuery("SELECT * from Win32_LogicalDisk") SWbemObject.Instances _. Session.Enumerate und die Enumerator-Objektmethoden ähneln viel mehr dem Vorgang des Skripterstellungsobjekts TextStream, das zum Lesen von Dateien als Stream verwendet wird.
Um Dateien als Textstream zu lesen, müssen Sie das Skriptobjekt TextStream 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 Enumeratorobjekt zu erhalten, und die Enumerator.ReadItem-Methode aufrufen, um das nächste Element zu erhalten. Wie beim Lesen aus der Textdatei können Sie die Enumerator.AtEndOfStream-Eigenschaft aufrufen, um zu überprüfen, ob Sie das Ende der Datenelemente erreicht haben.
So enumerieren Sie eine Ressource
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. Dieser Aufruf startet eine Enumeration. In WinRM erhält ein Enumerationsvorgang eine Auflistung nicht auf die gleiche Weise wie WMI. Stattdessen richtet die Session.Enumerate-Methode einen WS-Management-Enumerationskontext ein, der im Enumeratorobjekt verwaltet wird.
Set EnumJobs = objSession.Enumerate( strResource )Rufen Sie die Enumerator.ReadItem-Methode auf, um das nächste Element der Ergebnisse zu erhalten. Im WS-Management entspricht dies dem Pullvorgang. Verwenden Sie die Enumerator.AtEndOfStream-Methode als Steuerelement, um zu wissen, wann das Lesen nicht mehr möglich ist.
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