- •Общая структура wmi
- •Общие сведения о классах wmi
- •Программа wmic
- •Опции программы
- •Доступные в программе псевдонимы
- •Примеры работы с программой
- •Программа wbemtest.Exe
- •Подключаемся к пространству имен
- •Использование запросов wql для получения экземпляров классов
- •Выполнение методов классов
- •Общие сведения о событиях в wmi
- •Безопасность при работе с wmi
- •Строка моникера
Строка моникера
Существует три основных синтаксиса строки моникера. От основной строки синтаксиса зависит то, к чему именно будет подключаться сценарий. Ниже представлены эти три строки синтаксиса:
Winmgmts::«класс». Данный синтаксис позволяет подключиться к определенному классу репозитория CIM, хранящемуся в пространстве имен по умолчанию;
Winmgmts::«класс»:«метод». Данный синтаксис выполняет подключение к определенному классу репозитория CIM, хранящемуся в пространстве имен по умолчанию, после чего возвращает указать на конкретный метод данного класса;
Winmgmts::«класс».«ключевое свойство»=«значение». Данный синтаксис возвращает указатель на конкретный экземпляр класса, хранящегося в пространстве имен по умолчанию.
Если в строке моникера не указано пространство имен, тогда по умолчанию выполняется подключение к пространству имен \\root\cimv2.
Winmgmts://server01/root/cimv2:Win32_OperatingSystem
В приведенном примере server01 – это, сетевое имя компьютера, на котором мы хотим получить доступ к объекту WMI. Если указать вместо сетевого имени символ «.» (точка), то подключение будет происходить к локальному компьютеру. Root/CIMv2 – это пространство имен репозитория WMI (по аналогии очень похоже на виртуальный каталог веб-сервера). После двоеточия идет наименование класса WMI, к объектам которого мы хотим обратиться. В данном примере это класс Win32_OperatingSystem. Следует заметить, что в moniker string можно использовать не только прямую наклонную черту, но и обратную, так что строки «winmgmts://server01/root/cimv2» и «winmgmts:\\server01\root\cimv2» одинаковы.
При подключении к репозиторию WMI необязательно указывать имя локального сервера точкой. Строка может выглядеть и так: «WinMgmts:root/CIMv2». Если в строке moniker-string имя сервера не указано, то подключение произойдет и к локальному репозиторию WMI. Точно так же, как и в случае использования строки «WinMgmts://./root/CIMv2».
Работа с Active Directory через WMI Directory Service provider
Еще один полезный и интересный провайдер WMI – это провайдер для работы со службой каталогов Microsoft Active Directory. Все классы этого провайдера определены в пространстве имен root\deirctory\ldap. Существует альтернативное средство для работы с Active Directory из сценариев и приложений – это ADSI (Active Directory Services Interfaces). Объектная библиотека ADSI более проста и удобна в использовании, чем провайдер WMI Directory Services, тем более что он является надстройкой над все тем же ADSI.
Зачем же тогда нужен этот провайдер?! – возникает вопрос. Все довольно просто: поскольку WMI универсальное средство мониторинга и управления системой Windows и ее компонентами, то есть необходимость интегрировать все средства управления системой через WMI. Кроме того, поскольку некоторые программные продукты по своей архитектуре могут использовать только WMI, то задача управления Active Directory должна быть решена и через WMI в том числе.
В листинге 2 приведен пример простого сценария WMI, который модифицирует поле displayname указанного пользователя Active Directory.
Листинг 2. Изменение свойств пользователя в Active Directory через WMI
strComputer = "."
strUserID = "MyNew_WMI_User"
Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\directory\ldap")
Set objValSet = CreateObject("wbemscripting.swbemnamedvalueset")
objValSet.add "__PUT_EXT_PROPERTIES", array("ds_displayname")
objValSet.add "__PUT_EXTENSIONS", true
objValSet.add "__PUT_EXT_CLIENT_REQUEST", true
Set objEnum = objWMIService.ExecQuery("select * from ds_user where ds_cn = '" & strUserID & "'", "WQL", 32)
For each objUser in objEnum
objUser.ds_DisplayName = "Обновленноое поле DisplayName"
objUser.put_ 1, objValSet
Next
WScript.Echo "Свойства прользователя Active Directory обновлены"
При изменении свойств объектов Active Directory через WMI есть одна существенная особенность – необходимо явно определять, какие из атрибутов объекта вы хотите модифицировать. Для этого их названия нужно перечислить в специальном объекте класса swbemnamedvalueset. В остальном взаимодействие с классами провайдера службы каталогов практически не отличается от работы с другими классами WMI.