Удаленное управление 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
Начните с префикса, указывающего, что должна использоваться схема протокола WS-Management.
https://schemas.microsoft.com/wbem/wsman/1
Префикс URI ресурса для классов WMI всегда совпадает. Дополнительные сведения см. в префиксов URI.
Добавьте пространство имен WMI в префикс.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
Добавьте имя класса.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
Чтобы задать значение свойства или вызвать определенный метод, добавьте необходимое значение ключа или значения для класса.
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"