リソースの特定のインスタンスに対するクエリ

Session.Enumerate の呼び出しには、列挙をクエリに絞り込む省略可能なパラメーターがあります。 WinRM スクリプト APIWinRM C++ API は基になるWS-Management プロトコルで厳密にモデル化されているため、パラメーターはプロトコルと同じ用語 (フィルター言語とフィルター言語) を使用します。

Session.Enumerate のフィルターパラメーターと方言パラメーターを使用することも、ResourceLocator オブジェクトと AddSelector メソッドを構築して指定することもできますが、両方を実行することはできません。

この手順では、TCP/IP がバインドされ、有効になっているネットワーク アダプターのクエリを実行します。 このクエリは、IpEnabled プロパティが True に設定されているWin32_NetworkAdapterConfigurationのすべてのインスタンスを要求しますフィルター方言の追加を除き、クエリは単純な列挙のように処理されます。

この例では、クラス名 (Win32_NetworkAdapterConfiguration) が strFilter 文字列に既に記述されているため、Resource 定数のリソース名はアスタリスク "*" で表されます。

リソースの特定のインスタンスに対してクエリを実行するには

  1. 読みやすくするために、URI を定数として定義します。

    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. セッションを作成します。

    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
  3. フィルター文字列を作成します。 Windows リモート管理では、フィルター言語として WQL がサポートされています。

    strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
    
  4. flags パラメーターに必要な列挙定数を設定します。

    フラグに 列挙定数WSManFlagHierarchyDeepBasePropsOnly または WSManFlagHierarchyShallow が含まれている場合、WinRM サービスはエラー コード ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTEDを返します。

  5. Session.Enumerate メソッドを呼び出します。 この呼び出しによって列挙が開始されます。 Session.Enumerate メソッドは、Enumerator オブジェクトで維持されるWS-Managementプロトコル列挙コンテキストを確立します。

    Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
    
  6. Enumerator.ReadItem メソッドを呼び出して、結果の次の項目を取得します。 WS-Management プロトコルでは、これはプル操作に対応します。 Enumerator.AtEndOfStream メソッドをコントロールとして使用して、読み取りを停止するタイミングを把握します。

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

次の VBScript コード例は、完全なスクリプトを示しています。

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

Windows リモート管理の使用

リソースのすべてのインスタンスの列挙または一覧表示

ResourceLocator