Поделиться через


Запрос конкретных экземпляров ресурса

Вызов Session.Enumerate имеет необязательные параметры, которые сузят перечисление в запрос. Так как API сценариев WinRM и API WinRM C++ тесно моделироваются на базовом протоколе WS-Management, параметры используют ту же терминологию для запроса, что и протокол— фильтр и диалект фильтра.

Вы можете использовать параметры фильтра и диалекта Session.Enumerate, либо создать и указать объект ResourceLocator и метод AddSelector, но это невозможно.

Эта процедура выполняет запрос к сетевым адаптерам с привязкой TCP/IP и включенным. Запрос запрашивает все экземпляры Win32_NetworkAdapterConfiguration, для которых задано свойство IpEnabled с значением True. За исключением добавления фильтра и диалекта, запрос обрабатывается как простое перечисление.

В этом примере имя ресурса для константы ресурса представлено звездочкой "*", так как имя класса, Win32_NetworkAdapterConfiguration, уже упоминается в строке strFilter .

Запрос для определенных экземпляров ресурса

  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. Задайте все необходимые константы перечисления в параметре флагов .

    Помните, что если флаги включают константы перечисления WSManFlagHierarchyDeepBasePropsOnly или WSManFlagHierarchyShallow, служба WinRM возвращает код ошибки ERROR_WSMAN_POLYMORPHISM_MODE_UNSUPPORTED.

  5. Вызовите метод Session.Enumerate. Этот вызов запускает перечисление. Метод Session.Enumerate устанавливает контекст перечисления протокола 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