Freigeben über


Abfragen nach bestimmten Instanzen einer Ressource

Der Aufruf von Session.Enumerate beinhaltet optionale Parameter, welche die Enumeration in eine Abfrage eingrenzen. Da die WinRM-Skripting-API und die WinRM C++-API eng an das zugrunde liegende WS-Management-Protokoll angelehnt sind, verwenden die Parameter für die Abfrage dieselbe Terminologie wie das Protokoll – Filter und Filterdialekt.

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

Bei diesem Verfahren wird eine Abfrage für Netzwerkadapter ausgeführt, die an TCP/IP gebunden und aktiviert sind. Die Abfrage fordert alle Instanzen von Win32_NetworkAdapterConfiguration an, bei denen IpEnabled-Eigenschaft auf True festgelegt ist. Abgesehen von der Hinzufügung des Filters und des Dialekts wird die Abfrage wie eine einfache Enumeration behandelt.

In diesem Beispiel wird der Ressourcenname für die Ressourcenkonstante durch ein Sternchen „*” dargestellt, da der Klassenname Win32_NetworkAdapterConfiguration bereits in der Zeichenfolge strFilter erwähnt wird.

Abfragen nach bestimmten Instanzen einer Ressource

  1. Definieren Sie URIs als Konstanten, um die Lesbarkeit zu erleichtern.

    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. Konstruieren 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, dass der WinRM-Dienst den Fehlercode ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED zurückgibt, wenn die Flags die Enumerationskonstanten WSManFlagHierarchyDeepBasePropsOnly oder WSManFlagHierarchyShallow enthalten.

  5. Rufen Sie die Session.Enumerate-Methode auf. Dieser Aufruf startet eine Enumeration. Die Session.Enumerate-Methode stellt einen Enumerationskontext für das WS-Management-Protokoll her, 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. Im WS-Management-Protokoll entspricht dies dem Pullvorgang. Verwenden Sie die Enumerator.AtEndOfStream-Methode als Steuerelement, um zu wissen, 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

Aufzählen oder Auflisten aller Instanzen einer Ressource

ResourceLocator