Удаленное управление Windows и WMI

Удаленное управление Windows можно использовать для получения данных, предоставляемых инструментарием управления Windows (WMI и MI). Данные WMI можно получить с помощью скриптов или приложений, использующих API сценариев WinRM , или с помощью программы командной строки Winrm .

WinRM поддерживает большинство знакомых классов и операций WMI, включая внедренные объекты. WinRM может использовать WMI для сбора данных о ресурсах или для управления ресурсами в операционной системе windows. Это означает, что вы можете получить данные о таких объектах, как диски, сетевые адаптеры, службы или процессы на предприятии, с помощью существующего набора классов WMI. Вы также можете получить доступ к данным оборудования, доступным у стандартного поставщика WMI IPMI.

Определение ресурса WMI

Вы можете ссылаться на класс WMI как на ресурс в WinRM и в протоколе WS-Management: тип управляемой сущности, такой как служба или диск.

Класс или метод WMI определяется URI так же, как и любой другой ресурс при использовании протокола WS-Management. Универсальный код ресурса (URI) может указывать ресурс WMI (класс), действие WMI (метод) или идентифицировать конкретный экземпляр класса в сообщениях , отправляемых по сети. Дополнительные сведения см. в разделе URI ресурсов.

Создание префикса URI для классов WMI

Префикс URI содержит фиксированную часть и пространство имен WMI. Например, префикс URI в Windows Server, содержащий фиксированную часть префикса: http://schemas.microsoft.com/wbem/wsman/1/wmi/<WmiNamespace>. Это позволяет создавать префикс URI для любого пространства имен WMI. Например, для доступа к пространству имен WMI root\default используйте следующий префикс URI: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default/.

Большинство классов WMI для управления находятся в пространстве имен root\cimv2 . Для доступа к классам и экземплярам в пространстве имен root\cimv2 используйте префикс URI: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/. Дополнительные сведения см. в разделе URI ресурсов.

Создание полного URI для классов WMI

Универсальный код ресурса (URI), который вы предоставляете средству командной строки Winrm или скрипту, состоит из префикса и спецификации ресурса.

В следующей процедуре описывается, как создать URI ресурса для получения класса WMI или для использования в операции перечисления.

Создание URI ресурса для класса WMI

  1. Начните с префикса, который указывает, что следует использовать схему протокола WS-Management.

    https://schemas.microsoft.com/wbem/wsman/1

    Префикс URI ресурса для классов WMI всегда одинаков. Дополнительные сведения см. в разделе Префиксы URI.

  2. Добавьте пространство имен WMI в префикс.

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/

  3. Добавьте имя класса.

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service

  4. Чтобы задать значение свойства или вызвать определенный метод, добавьте необходимое значение ключа или значения для класса .

    http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt

    Если оставить значение ключа пустым, исходное значение свойства изменяться не будет.

    Примечание

    Если оставить значение ключа пустым, свойство имеет значение NULL.

     

Поиск ресурса WMI с помощью WinRM

Данные WMI можно получить с помощью программы командной строки Winrm или скрипта Visual Basic, использующего API сценариев WinRM. Путь WMI не используется для поиска ресурса. Вместо этого вы преобразуете пространство имен WMI и иерархию в универсальный код ресурса (URI).

URI WinRM для класса WMI содержит две части: префикс URI и класс, к которому требуется получить доступ.

Например, следующий универсальный код ресурса (URI) можно предоставить методу Session.Enumerate для перечисления всех служб на компьютере. Префикс URI — http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/, а класс — Win32_Service.

strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"

В WMI перечислить данные для всех экземпляров ресурса или класса несколькими способами:

  • Запрос для всех экземпляров этого ресурса.

    Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")

  • Вызов SWbemServices.InstancesOf или SWbemObject.Instances_.

    Set colServices = InstancesOf("Win32_Service")

В WinRM существует один способ получить список всех экземпляров ресурса: Session.Enumerate.

strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"
Set colServices = objSession.Enumerate( strResource )

Поиск определенного экземпляра ресурса WMI

В WMI можно назначить конкретный экземпляр класса, указав значения для ключевых свойств или запросив экземпляр, соответствующий списку значений свойств. Свойства ключа имеют квалификатор ключа WMI.

Получить конкретный экземпляр класса можно несколькими способами:

  • Вызов Session.Enumerate с параметрами фильтра и диалекта для создания запроса.

    RemoteComputer = "servername.domain.com"
    strDialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL"
    strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*"
    Set objWsman = CreateObject("Wsman.Automation")
    Set objSession = objWsman.CreateSession("https://" & RemoteComputer)
    
    strFilter = "SELECT * FROM Win32_Share WHERE Name='Admin$'"
    Set objResultSet = objSession.Enumerate(strResource, strFilter, strDialect)
    
  • Вызов SWbemServices.Get. Для Session.Get необходимо указать одно или несколько определенных значений ключа, перед которыми стоит вопросительный знак (?).

    Формат URI для конкретного экземпляра — http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/WMI_Class?Key1=Value.

    strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt"
    

    Класс WMI может иметь несколько ключей. Пары "имя-значение" ключа разделяются знаком "+". В этом случае используется формат : http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Key1=Value1+Key2=Value2.

    Синтаксис WinRM для получения одноэлементного объекта WMI отличается от WMI. Одноэлементный класс — это класс WMI, определенный таким образом, что разрешен только один экземпляр. Win32_CurrentTime или Win32_WMISetting являются примерами одноэлементного класса WMI.

    Синтаксис WMI для одноэлементных элементов показан в следующем примере кода VBScript.

    Set TimeObject = objWMIService.Get("Win32_CurrentTime=@")
    

    В следующем примере показан одноэлементный синтаксис WinRM, в котором не используется "@".

    strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
    
  • Добавление селектора в объект ResourceLocator или IWSManResourceLocator .

    В следующем примере кода VBScript показано, как использовать селектор для получения определенного экземпляра Win32_Processor.

    strUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Processor"
    Set objWsman = CreateObject("Wsman.Automation")
    Set Session = objWsman.CreateSession
    Set Locator = objWsman.CreateResourceLocator(strUri)
    Locator.AddSelector "DeviceID", "CPU0"
    

Сведения об удаленном управлении Windows

Префиксы URI

URI ресурсов

Создание скриптов в удаленном управлении Windows