Freigeben über


Abfragen bestimmter Instanzen einer Ressource

Der Aufruf von Session.Enumerate verfügt über optionale Parameter, die die Enumeration in eine Abfrage eingrenzen. Da die WinRM-Skript-API und die WinRM-C++-API eng auf das zugrunde liegende WS-Management Protokoll modelliert sind, verwenden die Parameter dieselbe Terminologie für die Abfrage wie das Protokoll – Filter - und Filterdialekt.

Sie können entweder die Filter- und Dialektparameter von Session.Enumerate verwenden, oder Sie können ein ResourceLocator-Objekt und die AddSelector-Methode erstellen und bereitstellen, aber Sie können nicht beides tun.

Mit diesem Verfahren wird eine Abfrage für Netzwerkadapter ausgeführt, für die TCP/IP gebunden und aktiviert ist. Die Abfrage fordert alle Instanzen von Win32_NetworkAdapterConfiguration an, für die die IpEnabled-Eigenschaft auf True festgelegt ist. Mit Ausnahme der Hinzufügung von Filter und Dialekt wird die Abfrage wie eine einfache Enumeration behandelt.

In diesem Beispiel wird der Ressourcenname für die Resource-Konstante durch ein Sternchen "*" dargestellt, da der Klassenname Win32_NetworkAdapterConfiguration bereits in der strFilter-Zeichenfolge erwähnt wird.

So fragen Sie bestimmte Instanzen einer Ressource ab

  1. Um das Lesen zu erleichtern, definieren Sie URIs als Konstanten.

    Const RemoteComputer = "servername.domain.com"
    Const Resource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
    Const Dialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"
    
  2. Erstellen Sie eine Sitzung.

    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
  3. Erstellen Sie die Filterzeichenfolge. Die Windows-Remoteverwaltung unterstützt WQL als Filterdialekt.

    strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
    
  4. Legen Sie alle erforderlichen Enumerationskonstanten im flags-Parameter fest.

    Beachten Sie folgendes: Wenn die Flags die EnumerationskonstantenWSManFlagHierarchyDeepBasePropsOnly oder WSManFlagHierarchyShallow enthalten, gibt der WinRM-Dienst den Fehlercode ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED zurück.

  5. Rufen Sie die Session.Enumerate-Methode auf . Mit diesem Aufruf wird eine Enumeration gestartet. Die Session.Enumerate-Methode erstellt einen WS-Management Protokollaufzählungskontext, der im Enumerator-Objekt verwaltet wird.

    Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
    
  6. 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 objResultSet.AtEndOfStream
        DisplayOutput(objResultSet.ReadItem)
    Wend
    

Das folgende VBScript-Codebeispiel zeigt das vollständige Skript.

Const RemoteComputer = "servername.domain.com"
Const Resource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
Const Dialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"

Set objWsman = CreateObject("Wsman.Automation")
Set objSession = objWsman.CreateSession("https://" & RemoteComputer)

strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"

Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)

While Not objResultSet.AtEndOfStream
    DisplayOutput(objResultSet.ReadItem)
Wend

'****************************************************
' 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

Verwenden der Windows-Remoteverwaltung

Auflisten oder Auflisten aller Instanzen einer Ressource

Resourcelocator