Запрос конкретных экземпляров ресурса
Вызов Session.Enumerate имеет необязательные параметры, которые сузят перечисление в запрос. Так как API сценариев WinRM и API WinRM C++ тесно моделироваются на базовом протоколе WS-Management, параметры используют ту же терминологию для запроса, что и протокол— фильтр и диалект фильтра.
Вы можете использовать параметры фильтра и диалекта Session.Enumerate, либо создать и указать объект ResourceLocator и метод AddSelector, но это невозможно.
Эта процедура выполняет запрос к сетевым адаптерам с привязкой TCP/IP и включенным. Запрос запрашивает все экземпляры Win32_NetworkAdapterConfiguration, для которых задано свойство IpEnabled с значением True. За исключением добавления фильтра и диалекта, запрос обрабатывается как простое перечисление.
В этом примере имя ресурса для константы ресурса представлено звездочкой "*", так как имя класса, Win32_NetworkAdapterConfiguration, уже упоминается в строке strFilter .
Запрос для определенных экземпляров ресурса
Для удобства чтения определите 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"
Задайте все необходимые константы перечисления в параметре флагов .
Помните, что если флаги включают константы перечисления WSManFlagHierarchyDeepBasePropsOnly или WSManFlagHierarchyShallow, служба WinRM возвращает код ошибки ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED.
Вызовите метод Session.Enumerate. Этот вызов запускает перечисление. Метод Session.Enumerate устанавливает контекст перечисления протокола 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
См. также