Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_drsp_09.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
207.87 Кб
Скачать

Робота з журналом подій Windows

Дуже часто в практичній роботі необхідно виконувати які-небудь дії, що повторюються, з журналом подій Windows : архівувати його, завантажувати в базу даних, централізований здійснювати пошук на різних серверах на предмет виявлення специфічних подій, міняти властивості журналів, просто записувати свої події в журнал, проводити безперервний моніторинг журналів і тому подібне. Для цієї мети в WMI призначені класи Win32_NTLogEventFile (представляє журнал подій Windows) иWin32_NTLogEvent (представляє окрема подія в цьому журналі). З класом NTLogEvent усе просто - кожна його властивість відповідає окремому атрибуту події в журналі. Наприклад, отримати усі повідомлення можна так:

Dim oColEvents

Set oColEvents = oSvc.ExecQuery("Select * from Win32_NTLogEvent")

For Each Item In oColEvents

            WScript.Echo Item.Message

Next

Якщо вам потрібні повідомлення тільки з конкретного журналу, або тільки помилки, або тільки від якогось джерела - фільтруємо їх засобами WQL. У Script repository можна знайти готові приклади по перекачуванню повідомлень з журналів в бази даних.

Якщо ж вам треба виконати якісь операції з самим журналом подій, у вашому розпорядженні - об'єкт Win32_EventLogFile з такими методами, як BackupEventLog, CopyEventLog, ClearEventLog і тому подібне

Об'єкт операційної системи - Win32_OperatingSystem

Для цього об'єкту передбачена безліч цікавих властивостей, таких, як CSDVersion – останній встановлений сервіс-пак, Locale – мовна версія операційної системи, LastBootTime – останнім часом завантаження, тип і версія операційної системи і тому подібне. Крім того, для нього передбачено три методи із зрозумілими назвами: Reboot, Shutdown, Win32Shutdown (з'являються додаткові можливості виключення).

До цього класу примикає по своїх можливостях клас Win32_OperationSystemQFE, за допомогою якого можна отримати колекцію об'єктів, що представляють усі встановлені патчи операційної системи з великою кількістю атрибутів.

Робота з Win32_Process : запуск, завершення роботи, моніторинг процесів на комп'ютері

Один з найчастіше використовуваних класів WMI - клас Win32_Process. За допомогою цього класу можна дістати ті можливості, яких часто не вистачає в реальній роботі, : можливість централізований запустити програми на багатьох комп'ютерах з вказаними вами параметрами, відстежити запуск/завершення програм, з'ясувати, які програми "поїдають" ресурси процесора/пам'яті/мережі і тому подібне. Особливо зручне те, що для виконання таких операцій немає необхідності ставити на комп'ютер якого-небудь клієнта видаленого доступу - служби WMI, що досить працює за умовчанням.

Щоб запустити на видаленому комп'ютері процес, треба підключитися до служби WMI на цьому комп'ютері і скористатися методом Create для Win32_Process :

Dim oLocator

Set oLocator = CreateObject("wbemScripting.Swbemlocator")

Dim oSvc

Set oSvc = oLocator.ConnectServer("Vancouver")

Dim oProc

Set oProc = oSvc.Get("Win32_Process")

oProc.Create "calc.exe"

Калькулятор буде вже запущений, але він буде запущений з параметрами за умовчанням - в невидимому вікні (буде видний тільки через Task Manager). Щоб змінити параметри запуску застосування (пріоритет, змінні оточення і тому подібне), можна скористатися об'єктом Win32_ProcessStartup. Проте запустити процес в інтерактивному режимі не вийде - ця можливість була прибрана починаючи з Windows 2000 SP3. Аргумент - скрипти WMI зазвичай запускаються з адміністративними правами і не можна давати користувачеві можливість використовувати вікно застосування з такими правами.

Для того, щоб примусово завершити процес, використовується метод Terminate :

Set colProcessList = osvc.ExecQuery _

    ("Select * from Win32_Process Where Name = 'Notepad.exe'")

For Each objProcess in colProcessList

    objProcess.Terminate()

Next

А відстежити створення нового процесу можна так:

Set colMonitoredProcesses = oSvc. _       

    ExecNotificationQuery("select * from __instancecreationevent " _

        & " within 1 where TargetInstance isa 'Win32_Process'")

i = 0

Do While i = 0

    Set objLatestProcess = colMonitoredProcesses.NextEvent

    Wscript.Echo objLatestProcess.TargetInstance.Name

Loop

Відстежити завершення роботи процесу можна так само, тільки замість події __instancecreationevent використовується подія __instancedeletionevent.

Якщо спільно використовувати моніторинг створення процесів і метод Terminate, можна взагалі заборонити користувачеві запускати певну програму на комп'ютері:

Set colMonitoredProcesses = oSvc. _       

    ExecNotificationQuery("select * from __instancecreationevent " _

        & " within 1 where TargetInstance isa 'Win32_Process'")

i = 0

Do While i = 0

    Set objLatestProcess = colMonitoredProcesses.NextEvent

    If objLatestProcess.TargetInstance.Name = "notepad.exe" Then

    objLatestProcess.TargetInstance.Terminate

    End If

Loop

Довше за секунду блокнот на комп'ютері користувача відкритий не буде.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]