查詢資源的特定實例
對 Session.Enumerate 的呼叫具有選擇性參數,會將列舉範圍縮小為查詢。 由於 WinRM 腳本 API 和 WinRM C++ API 會緊密地模型化於基礎 WS-Management 通訊協定上,因此參數會使用相同的術語來查詢通訊協定—篩選和篩選方言。
您可以使用 Session.Enumerate 的篩選和方言參數,也可以建構並提供 ResourceLocator 物件和 AddSelector 方法,但無法執行這兩個動作。
此程式會針對已系結並啟用 TCP/IP 的網路適配器執行查詢。 查詢會要求ipEnabled屬性設定為True的所有Win32_NetworkAdapterConfiguration實例。 除了新增 篩選 和 方言之外,查詢會像簡單的列舉一樣處理。
在此範例中,Resource 常數的資源名稱是以星號 “*” 表示,因為 strFilter 字串中已經提及類別名稱Win32_NetworkAdapterConfiguration。
查詢資源的特定實例
為了方便閱讀,請將 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 參數中設定任何必要的列舉常數。
請注意,如果旗標包含列舉常數 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 管理通訊協定中,這會對應至提取作業。 使用 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
相關主題