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

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

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

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

В этом примере имя ресурса для константы Resource представлено звездочкой "*", так как имя класса , 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. Задайте все обязательные константы перечисления в параметре flags .

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

  5. Вызовите метод Session.Enumerate . Этот вызов запускает перечисление. Метод Session.Enumerate устанавливает контекст перечисления WS-Management протокола, который поддерживается в объекте Enumerator .

    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