Лабораторная работа № 3 Обработка событий в WMI

  • ID работы: 17801
  • Добавлена: 2023
  • Посл. изменения: 15-12-2023
  • Тип:  .
  • Предмет: Информатика
  • Формат: zip

Цена: 1,000.00

Лабораторная работа № 3 Обработка событий в WMI

Цель работы: научиться разрабатывать временные обработчики событий

WMI в виде сценариев на языке VBScript.

Введение

Внутри WMI реализована служба работы с событиями — WMI Event Service. Эта служба поддерживает фильтрацию событий и обеспечение их обработки.

Для того чтобы зарегистрировать событие и иметь возможность его обрабатывать, необходимо при помощи метода ExecNotificationQuery объекта SWbemServices выполнить запрос WQL по специальной форме, например:

Set colMonitorProcess = _ objWMIService.ExecNotificationQuery _

(«SELECT * FROM InstanceOperationEvent » & _ «WITHIN 1 WHERE TargetInstance ISA ‘Win32_Process'») Данный WQL запрос возвращает экземпляры класса

InstanceOperationEvent (с двумя подчеркиваниями), которые формируются при каждом создании, удалении или модификации экземпляра WMI класса. Оператор WITHIN определяет интервал времени в секундах между опросами. WITHIN 1 говорит о том, что опрос будет производиться каждую секунду. С помощью конструкции WHERE происходит фильтрация события, при этом оператор ISA указывает необходимые события. В приведенном выше примере происходит фильтрация событий, для которых

свойство TargetInstance класса InstanceOperationEvent это экземпляр класса

Win32_Process.

Класс InstanceOperationEvent является родительским для всех событий вызываемых экземплярами WMI классов. Потомки этого класса:

InstanceCreationEvent – появляется (создается) при создании нового экземпляра WMI класса;

InstanceModificationEvent – создается при модификации существующего экземпляра класса;

InstanceDeletionEvent – создается при уничтожении экземпляра класса.

При запросе InstanceOperationEvent возвращаются все экземпляры этих трех классов.

Метод ExecNotificationQuery возвращает объект класса SWbemEventSource, в котором описан единственный метод NextEvent. Этот метод ожидает появления события, удовлетворяющего условию запроса, и при его появлении, возвращает стандартный объект SWbemObject, который представляет событие. Для получения доступа к объекту, который вызвал это событие, используется его свойство TargetInstance (Листинг 3.1).

Листинг 3.1. Обработка одиночного события.

Set objWMIService = GetObject(«winmgmts:»)

Set colMonitorProcess = _ objWMIService.ExecNotificationQuery _

(«SELECT * FROM InstanceOperationEvent » _ & » WITHIN 1 WHERE TargetInstance ISA » _

& «‘Win32_Process'»)

WScript.Echo «Ожидание события …»

Set objLatestEvent = colMonitorProcess.NextEvent WScript.Echo objLatestEvent.Path_.Class

Wscript.Echo «Process Name: » & _ objLatestEvent.TargetInstance.Name

Wscript.Echo «Process ID: » & _ objLatestEvent.TargetInstance.ProcessId

WScript.Echo «Time: » & Now

В сценарии (Листинг 3.1) происходит ожидание наступления первого события, вызванного созданием, модификацией, либо удалением экземпляра класса Win32_Process; выводится имя класса события, информация о процессе, вызвавшем событие и время. В данном сценарии происходит обработка только одного события. Для того чтобы опрос происходи постоянно, необходимо поместить в сценарий бесконечный цикл (Листинг 3.2).

Листинг 3.3. Обработка событий в цикле.

Set objWMIService = GetObject(«winmgmts:»)

Set colMonitorProcess = _ objWMIService.ExecNotificationQuery _

(«SELECT * FROM InstanceOperationEvent » _ & » WITHIN 1 WHERE TargetInstance ISA » _

& «‘Win32_Process'»)

WScript.Echo «Ожидание события …» Do

Set objLatestEvent = colMonitorProcess.NextEvent WScript.Echo objLatestEvent.Path_.Class Wscript.Echo «Process Name: » & _

objLatestEvent.TargetInstance.Name Wscript.Echo «Process ID: » & _

objLatestEvent.TargetInstance.ProcessId WScript.Echo «Time: » & Now

Loop

Запуск таких сценариев необходимо выполнять в консольном режиме.

Для завершения – нажать комбинацию клавиш Ctrl+C.

Ход работы

1. Составить сценарий выполняющий запуск определенного приложения, ожидание его завершения и вывод на экран информации о времени его работы в формате:

Время запуска: 12:10:00

Время завершения: 12:15:10

Длительность работы: 00:05:10

3. Составить сценарий запрещающий запуск определенного приложения. При попытке запуска данного приложения, его работа должна быть завершена, и на экран должно быть выведено сообщение о попытке запуска. Если количество разрешенных копий больше 0, то запрещать запуск необходимо только экземпляры приложения, превышающие указанное число.

Приложение и количество разрешенных копий выбираются по варианту из табл. 3.1.

Таблица 3.1

Варианты заданий для запуска процесса

№ в-та Приложение Количество разрешенных копий
исполняемый файл название
1 notepad.exe Notepad 2
2 calc.exe Calculator 3
3 charmap.exe Character Map 1
4 clipbrd.exe ClipBook Viewer 0
5 eventvwr.exe Event Viewer 1
6 mplay32.exe Media Player 3
7 osk.exe On-Screen Keyboard 0
8 perfmon.exe Performance Monitor 0
9 taskmgr.exe Windows Task Manager 0
10 write.exe WordPad 2
11 telnet.exe Microsoft Telnet Client 0
12 cmd.exe Command Line 1

Контрольные вопросы

  1. Назначение службы работы с событиями WMI.
  2. Регистрация событий.
  3. Метод ExecNotificationQuery() объектов класса SWbemServices.
  4. Синтаксис WQL запроса регистрации события.
  5. Класс InstanceOperationEvent и его подклассы.
  6. Класс SWbemEventSource.
  7. Метод NextEvent класса SWbemEventSource.
  8. Объект TargetInstance.

 

50 ГЕНИАЛЬНЫХ СПОСОБОВ СПИСАТЬ НА ЭКЗАМЕНЕ / ШКОЛЬНЫЕ ЛАЙФХАКИ + КОНКУРС50 ГЕНИАЛЬНЫХ СПОСОБОВ СПИСАТЬ НА ЭКЗАМЕНЕ / ШКОЛЬНЫЕ ЛАЙФХАКИ + КОНКУРС

Отзывы

Отзывов пока нет.

Будьте первым кто оставил отзыв;

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Заказать