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

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

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

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

この例では、クラス名 (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 パラメーターに必要な列挙型定数を設定します。

    フラグに Enumeration Constants 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