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


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

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

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

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

Класс 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. Например, чтобы получить доступ к пространству имен root\default WMI, используйте следующий префикс 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 и класс, к которому требуется получить доступ.

Например, приведенный ниже URI можно предоставить методу Session.Liste для перечисления всех служб на компьютере. Префикс 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.Liste.

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