リソースの特定のインスタンスに対するクエリ
Session.Enumerate の呼び出しには、列挙をクエリに絞り込む省略可能なパラメーターがあります。 WinRM スクリプト APIと WinRM C++ API は基になる WS-Management プロトコルで厳密にモデル化されているため、パラメーターはプロトコル (filter と filter dialect) と同じ用語を使用します。
Session.Enumerate の filter パラメーターと dialect パラメーターを使用することも、ResourceLocator オブジェクトと AddSelector メソッドを構築して指定することもできますが、両方を行うことはできません。
この手順では、TCP/IP がバインドされ、有効になっているネットワーク アダプターに対してクエリを実行します。 このクエリは、IpEnabled プロパティが True に設定されている Win32_NetworkAdapterConfiguration のすべてのインスタンスを要求します。 filter と dialect の追加を除き、クエリは単純な列挙のように処理されます。
この例では、クラス名 (Win32_NetworkAdapterConfiguration) が既に strFilter 文字列に記述されているため、Resource 定数のリソース名はアスタリスク "*" で表されます。
リソースの特定のインスタンスに対してクエリを実行するには
読みやすくするために、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"
セッションを作成します。
Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
フィルター文字列を作成します。 Windows リモート管理では、フィルター言語として WQL がサポートされます。
strFilter = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IpEnabled=TRUE"
flags パラメーターに必要な列挙型定数を設定します。
フラグに Enumeration Constants WSManFlagHierarchyDeepBasePropsOnly または WSManFlagHierarchyShallow が含まれている場合 WinRM サービスはエラー コード ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED を返します。
Session.Enumerate メソッドを呼び出します。 この呼び出しで、列挙型が開始されます。 Session.Enumerate メソッドは、Enumerator オブジェクトに保持される WS-Management プロトコル列挙型コンテキストを確立します。
Set objResultSet = objSession.Enumerate(Resource, strFilter, Dialect)
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
関連トピック