
- •Утиліти і засоби для роботи з wmi
- •Підключення до wmi
- •Робота з об'єктами sWbemServices і sWbemObject
- •Як дістатися до конкретного об'єкту: мова запитів wql
- •Робота з подіями
- •6.1 Архітектура роботи з подіями в wmi
- •6.2 Типи подій
- •6.3 Запит, реєструючий подію
- •Класи wmi
- •7.1 Класи wmi для роботи з устаткуванням
- •7.2 Класи для роботи з операційною системою
- •Робота із службами
- •Робота з файлами і каталогами
- •Робота з журналом подій Windows
- •Об'єкт операційної системи - Win32_OperatingSystem
- •Робота з Win32_Process : запуск, завершення роботи, моніторинг процесів на комп'ютері
- •Інші класи для роботи з операційною системою
- •7.3 Класи для роботи зі встановленими продуктами
- •Практичне завдання:
Робота з подіями
6.1 Архітектура роботи з подіями в wmi
Усередині служби WMI реалізована служба роботи з подіями - WMI Event Service. Ця служба підтримує фільтрацію подій і забезпечення реакції на них.
Скрипт, застосування або просто адміністратор (за допомогою утиліти CIM Event Registration) можуть зареєструвати підписку на події, виступивши в ролі будівника підписки - Subscriber Builder. Події представляються у вигляді системного класу _Event, на появу яких реагує підписка.
Підписка (subscription) - визначення події, що представляє інтерес для будівника події. Фактично підписка - це вимога для служби WMI виконати певні дії, якщо станеться подія, що підпадає під умову підписки. Підписка створюється за допомогою специальногоWQL -запроса (SELECT). Настійно рекомендується визначити в цьому запиті максимально строгі умови - щоб уникнути обробки непотрібних вам подій.
Ще один компонент архітектури роботи з подіями - одержувач події, Event Consumer. Цей той блок коду в скрипті (чи застосуванні), який отримує повідомлення про настання події і реагує на нього. Одержувачі можуть бути тимчасовими і постійними.
Тимчасові одержувачі - це одержувачі, яким передаватимуться сповіщення про події тільки тоді, коли цей скрипт/застосування запущений. Тимчасові одержувачі зазвичай реєструють свої події за допомогою виклику методу ExecNotificationQuery.
Інформація про постійних одержувачів зберігається в репозитарии CIM. При настанні події службаWMI перевіряє, чи запущено необхідне застосування/скрипт, яке має бути одержувачем. Якщо воно запущене, то воно оповіщається, а якщо немає - те спочатку служба WMI проводить запуск цього застосування. ВWMI SDK поставляється такий постійний одержувач - WMI Event Viewer Tool. Наприклад, щоб зареєструвати постійного одержувача подій WMI (наприклад, для появи нових повідомлень в журналі застосувань), треба виконати наступні дії:
записати інформацію про застосування Event Viewer в репозитарий CIM. Для цього необхідно виконати в командному рядку команду
mofcomp c:\winnt\system32\wbem\eviewer.mof
((файл eviewer.mof встановлюється разом з WMI SDK)
зареєструвати нового Event Consumer для служби WMI. Для цього необхідно відкрити WMI EventRegistration, підключитися до пропонованого за умовчанням простору імен root\cimv2 і в спадаючому списку ліворуч вибрати Consumers. Далі розкрити контейнер _EventConsumer -> EventViewerConsumer, клацнути правою кнопкою миші по EventViewerConsumer і в контекстному меню вибрати New Instance. Для створюваного екземпляра досить заповнити тільки поле Name. Після натиснення OK створений одержувач з'явиться в дереві Event Registration.
потім створити фільтр для події, що цікавить нас. Для цього в спадаючому списку треба вибрати Filters, клацнути правою кнопкою миші по рядку _EventFilter і так само в контекстному меню вибрати NewInstance. Для створюваного об'єкту фільтру треба заповнити наступні поля:
Name (наприклад, TestFilter)
Query (наприклад, для перехоплення подій журналу застосувань - Select * from __InstanceCreationEvent Where TargetInstance ISA 'Win32_NTLogEvent') QueryLanguage - WQL
останнє, що залишилося зробити - зареєструвати для цього фільтру приймач події. Для цього в правій частині екрану клацніть правою кнопкою миші по створеному вами об'єкту одержувача і в контекстному меню виберіть Register. У стовпці Reg повинен з'явитися зелений прапорець: одержувач і фільтр налагоджені для прийоми подій.
Для перевірки створеної вами конфігурації досить виконати короткий скрипт, який згенерує повідомлень в журнал подій застосувань, наприклад:
Dim oShell
Set oShell = CreateObject("Wscript.Shell")
oShell.LogEvent 0, "TestMessage"
Якщо усе зроблено правильно, то з'явиться вікно WMI Event Viewer з інформацією про подію, що сталася.