Экзамены Microsoft

Microsoft 2003 Server
Windows 2000

Сторонний софт

Citrix MetaFrame

Подписка на новости

Новости раздела Инструкции
feed image

Опрос

Нужна ли России своя операционная система?





      Яндекс цитирования
      Rambler's Top100
     
      Находится в каталоге Апорт





Печать E-mail

Инструменты управления Windows: помощник системного администратора

БОБ УЭЛЛС
07.09.2000

В предыдущих статьях я уже рассказывал о нескольких сценариях WMI (Windows Management Instrumentation), которые дают некоторое представление о мощности библиотеки сценариев WMI. В №4(7) Windows 2000 Magazine/RE за 2000 г. в статье «Файлы Windows Script в действии» приводился пример анализатора журнала событий (т. е. eventlog.wsf и library.vbs). Библиотека WMI предоставляет разнообразные возможности для обработки журнала событий (Event Log), и один из способов обработки журнала показан в eventlog.wsf.

Для дополнительного изучения возможностей сценариев WMI рекомендую обратиться к Microsoft Windows 2000 Professional Resource Kit или Microsoft Windows 2000 Server Resource Kit. Там можно найти более 50 сценариев WMI для управления или создания отчетов о чем угодно, начиная с параметров загрузки компьютера и заканчивая учетными записями пользователей. Файлы VBScript (.vbs) можно просмотреть в каталоге, куда установлен Resource Kit, но для того, чтобы освоить WMI, нужно изучить внутренний механизм работы сценариев.

WMI-сценарии 101

Сценарии WMI – это библиотека интерфейсов автоматизации, которые располагаются над Common Information Model Object Manager (CIMOM). COM-совместимые языки сценариев (например, Windows Script, WS, ActivePerl) используют интерфейсы автоматизации для доступа к инфраструктуре WMI. Библиотека Wbemdisp.dll наследует WMI объекты автоматизации, методы и свойства.

Для доступа к WMI через библиотеку сценариев WMI нужно сделать три шага, которые являются общими для большинства сценариев WMI. Первое – необходимо подключиться к службе Windows Management service, второе – получить экземпляры управляемых объектов WMI, третье – вызвать метод или получить доступ к свойствам управляемого объекта. После знакомства с интерфейсами, которые используются для выполнения этих трех шагов, гораздо увереннее чувствуешь себя на пути к вершине искусства написания сценариев.

Рассмотрим WMI-сценарий, демонстрирующий все три шага в действии. В Листинге 1 приведен WMI-сценарий Winmgmts.vbs.

Сценарий инициализирует две строковые переменные – strComputer и strProcsToKill. Имя целевого компьютера находится в переменной strComputer, а переменной strProcsToKill присвоено имя процесса, которое используется в сценарии для обнаружения и остановки всех текущих процессов с таким именем. В приведенном примере имя текущего процесса notepad.exe.

В Листинге 1 (см. код, выделенный меткой A) для подключения к WMI на целевом компьютере и доступа ко всем экземплярам класса Win32_Process используется WMI-моникер (moniker) winmgmts. (Моникер – специальный COM-объект, который отыскивает в сети или создает и инициализирует экземпляр объекта и возвращает клиенту указатель на него.) Для повышения безопасности WMI моникер использует встроенные средства аутентификации, а также позволяет устанавливать дополнительные маршруты к объектам. (Более подробно с синтаксисом WMI-моникера можно ознакомиться на http://msdn.microsoft.com/library/psdk/wmisdk/ scintro_6tpv.htm.)

Сценарий возвращает каждый экземпляр Win32_ Process как SWbemObject из коллекции SwbemObjectSet. SWbemObjectSet и SWbemObject – это лишь два из нескольких интерфейсов, которые предоставляет библиотека сценариев WMI. Так как SWbemObjectSet является коллекцией, то доступ к ее элементам можно организовать при помощи конструкции For...Each языка сценариев VBScript (см. Листинг 1, метка B).

Меткой B выделена часть сценария, которая выполняет последний шаг для доступа к WMI. Внутри цикла For...Each организован доступ к двум свойствам и одному методу, которые определены в классе Win32_Process. Сначала, при выполнении сценария, для каждого экземпляра Win32_ Process выводятся его идентификатор процесса ProcessID и имя Name. Затем имя текущего экземпляра процесса Win32_Process Name сравнивается со значением переменной strProcsToKill. Если эти значения совпадают, то в сценарии вызывается определенный в классе Win32_ Process метод уничтожения текущего экземпляра процесса.

В Листинге 1 демонстрируются два различных набора методов и свойств. Первый набор состоит из методов и свойств, которые предоставляют интерфейсы библиотеки WMI для того, чтобы подключиться к WMI, извлечь экземпляры классов и подписаться на события. Второй набор состоит из методов и свойств, предоставляемых классами Win32 Common Information Model (CIM) (например, Win32_ Process, Win32_NTEventLog).

Чтобы понять, как работают свойства и методы более чем 300 классов, входящих в CIM Win32, рассмотрим свойства и методы класса Win32_ Process. Напомню, что класс – это шаблон, который определяет свойства и поведение каждого экземпляра класса. CIM содержит все определения классов для управляемого окружения. В winmgmts.vbs каждый экземпляр процесса использует методы и свойства класса Win32_Process, как собственные, так и унаследованные. Это справедливо для всех классов, определенных в CIM. Исследовать классы, определенные в CIM, достаточно просто при помощи программы wbemtest.exe. Информацию о классах можно найти в документации WMI SDK.

Модель объектов WMI

На Рисунке 1 модели объектов WMI показаны основные объекты библиотеки сценариев WMI. Объекты модели предоставляют методы и свойства, использующиеся в сценариях для доступа и извлечения объектов WMI. Рассмотрим по шагам, как winmgmts.vbs использует объекты, которые предоставляет данная модель.


Рисунок 1. Модель объектов сценариев WMI.

Шаг 1: подключение к WMI. Для подключения к WMI в сценарии применяется моникер winmgmts. Он возвращает объект SwbemServices. Вместо создания ссылки на объект Swbem Services в сценарии немедленно вызывается метод InstancesOf объекта SwbemServices.

Шаг 2: выборка экземпляров класса. Метод SwbemServices InstancesOf возвращает экземпляры указанного класса. В Листинге 1 метод SWbemServices InstancesOf возвращает экземпляры Win32_Process в SwbemObjectSet. Отношения между объектами показаны на Рисунке 1. В сценарии инициализируется переменная-ссылка wbemObject Set для указания на коллекцию SWbemObjectSet, которую возвращает метод SWbem Services InstancesOf.

Шаг 3: доступ к методам и свойствам класса. Коллекция SwbemObjectSet содержит экземпляры класса CIM, представленные SwbemObject. Для доступа к каждому экземпляру Win32_Process, который является членом коллекции SwbemObjectSet, можно использовать цикл For...Each. При каждом проходе цикла (см. Листинг 1, метка B) переменная-ссылка wbemObject связывается с очередным экземпляром Win32_Process в коллекции. SwbemObject используется для доступа к методам и свойствам экземпляра класса CIM.

В Таблице 1 приведено краткое описание каждого объекта модели WMI Scripting Object Model и указаны ссылки на Web-сайт Microsoft, где можно найти подробную информацию о методах и свойствах соответствующего объекта.

В Листинге 2 приведен сценарий locator.vbs, который выполняет ту же задачу, что и winmgmts.vbs. Основное различие между двумя примерами в том, что locator.vbs для доступа к объекту SwbemServices использует объект SwbemLocator, а не WMI-моникер. Это объясняет, почему locator.vbs применяет VBScript-функцию CreateObject, в то время как winmgmts.vbs использует функцию GetObject. Winmgmts.vbs использует GetObject для работы с моникерами. Программный идентификатор Wbem Scripting.SWbemLocator в locator.vbs указывает функции CreateObject, что необходимо создать объект SWbem sLocator.

Хотя сценарии, приведенные в Листингах 1 и 2, функционально одинаковы, они демонстрируют действие различных механизмов, заложенных в библиотеке WMI. Новичкам может показаться, что синтаксис моникера излишне запутан, поэтому вначале они могут поработать с SWbem Locator. С точки зрения функциональности метод Connect Server, который предоставляет SWbemLocator, позволяет распределять полномочия, необходимые для проведения аутентификации WMI соединения. Синтаксис моникера предоставляет возможность выполнения нескольких действий в одной строке кода.

Объекты, которые предоставляет библиотека сценариев WMI, позволяют основательно подойти к разработке данных WMI. В следующей статье я планирую рассмотреть объекты библиотеки WMI с еще более богатой функциональностью. А пока я хотел бы предложить читателям в качестве тренировки модифицировать любой из двух листингов так, чтобы извлечь другие классы Win32. Подсказка: помимо изменения имени класса, которое передается методу InstancesOf, необходимо модифицировать тело цикла For... Each так, чтобы применяемые в цикле методы и свойства совпадали с методами и свойствами выбранного класса.


Листинг 1. Winmgmts.vbs.

‘* Использование моникера winmgmts и VBScript GetObject для доступа к WMI
strComputer = «tmtowtdi»
strProcsToKill = «notepad.exe»
‘* Шаг 1. Подключение к WMI на целевом компьютере.
‘* Шаг 2. Извлечь экземпляры класса Win32_Process.
BEGIN CALLOUT A
Set wbemObjectSet = _ 
 GetObject(«winmgmts://» & strComputer).InstancesOf(«Win32_Process»)
END CALLOUT A
‘* Шаг 3. Просмотр SWbemObjectSet, содержащего экземпляры
‘* SWbemObjects, которые в данном примере являются объектами Win32_Process.
‘* Вывести значения ProcessID and Name для каждого экземпляра процесса
‘* и прервать выполнение всех процессов, чьи имена Name совпадают с значением
‘* переменной strProcsToKill («notepad.exe» в этом примере). 
BEGIN CALLOUT B
For Each wbemObject In wbemObjectSet
 WScript.Echo wbemObject.ProcessID & «: « & wbemObject.Name
 If LCase(wbemObject.Name) = strProcsToKill Then wbemObject.Terminate
Next
END CALLOUT B

Листинг 2. Locator.vbs.

‘* Использование SWbemLocator и VBScript CreateObject для доступа к WMI
strComputer = «tmtowtdi»
strProcsToKill = «notepad.exe»
‘* Создать указатель на объект SWbemLocator для подключения
‘* к WMI на целевом компьютере с необязательной аутентификацией.
Set wbemLocator = CreateObject(«WbemScripting.SWbemLocator»)
‘* Шаг 1. Подключение к WMI на целевом компьютере.
Set wbemServices = wbemLocator.ConnectServer(strComputer)
‘* Шаг 2. Извлечь экземпляры класса Win32_Process.
Set wbemObjectSet = wbemServices.InstancesOf(«Win32_Process»)
‘* Шаг 3. Просмотр SWbemObjectSet, содержащего экземпляры
‘* SWbemObjects, которые в данном примере являются объектами Win32_Process.
‘* Вывести значения ProcessID and Name для каждого экземпляра процесса
‘* и прервать выполнение всех процессов, чьи имена Name совпадают с значением
‘* переменной strProcsToKill («notepad.exe» в этом примере). 
For Each wbemObject In wbemObjectSet
WScript.Echo wbemObject.ProcessID & «: « & wbemObject.Name
 If LCase(wbemObject.Name) = strProcsToKill Then wbemObject.Terminate
Next


Таблица 1. Основные объекты модели WMI Scripting Object Model.

ОбъектОписание
SWbemLocatorОбеспечивает доступ к объекту SWbemServices, который осуществляет подключение к WMI. Предоставляет дополнительные возможности проверки подлинности при установлении соединения. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_2oqa.htm.
SWbemServicesОбеспечивает доступ к экземплярам управляемых объектов, осуществляет запросы, выполняет другие связанные с WMI операции. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_3ann.htm.
SWbemEventSourceИзвлекает события при помощи запроса о событиях. Доступ к этому объекту осуществляется при вызове метода SWbemServices::ExecNotificationQuery. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_563p.htm.
SWbemObjectSetЯвляется коллекцией объектов SWbemObject. Создать этот объект и получить к нему доступ можно при помощи нескольких методов, принадлежащих объектам SWbemServices и SWbemObject. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_8jas.htm.
SWbemObjectПредставляет собой определение одного класса WMI в форме экземпляра объекта. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_8fck.htm.
SWbemLastErrorПредставляет собой объект обработки ошибок. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_2iia.htm.
SWbemMethodSetЯвляется коллекцией объектов SWbemMethod, которые соответствуют методам управляемых объектов WMI. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_19kk.htm.
SWbemPropertySetЯвляется коллекцией объектов SWbemProperty, которые соответствуют свойствам управляемых объектов WMI. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_4bas.htm.
SWbemQualifierSetЯвляется коллекцией объектов SWbemQualifier, каждый из которых представляет один спецификатор класса, экземпляра, свойства или параметра метода WMI. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_8dv8.htm.
SWbemObjectPathКонструирует пути объекта. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_93s8.htm.
SWbemSecurityНастраивает установки безопасности. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_4m0p.htm.
SWbemSinkПодписывает на получение сообщений о происходящих событиях. См. http://msdn.microsoft.com/library/psdk/wmisdk/scref_0sff.htm.


БОБ УЭЛЛС
Консультант по программному обеспечению; специализируется на вопросах проектирования и реализации инфрастуктуры информационных систем, основанных на NT. Имеет сертификаты MCSE и MCT. С ним можно связаться по адресу Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script .


Журнал "Windows & .NET Magazine/RE", #06, 2000 год // Издательство "Открытые системы" (http://www.osp.ru/)
Постоянный адрес статьи: http://www.osp.ru/win2000/2000/06/073.htm
 

Тематические ссылки от Яндекса

Реклама





Реклама


Товары в сети


Реклама