|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
16.8.2 Классы для работы с операционной системойКлассы WMI для работы с объектами Windows в скриптах VBScript, классы Win32_Service, Win32_SystemDriver, Win32_Directory, Win32_NTLogEvent, Win32_OperatingSystem, Win32_NTLogEventFile, Win32_OperatingSystem, Win32_Process, Win32_Share, Win32_StartupCommand, Win32_Account, Win32_BootConfiguration Поскольку одна из целей WMI - обеспечить полный контроль над операционной системой, набор классов в этом разделе очень большой (несколько сотен). Большая часть этих классов (как и классов для работы с оборудованием) предназначена для получения информации и их свойства доступны только на чтение. Мы рассмотрим только те классы, у которых существуют методы, при помощи которых можно программно управлять компьютером. Работа со службамиКлассы Win32_BaseService, Win32_Service и Win32_SystemDriver представляют службы Windows: Win32_Services - обычные, Win32_SystemDriver - драйверы (на самом деле большой разницы между службами и драйверами для Windows нет и информация о них хранится в одной ветви реестра), Win32_BaseServices - и то, и другое вместе. У эти классов есть важные методы:
Наиболее часто встречающиеся ситуации для работы со службами:
Для всех этих ситуаций используются классы Win32_BaseService. Во многих ситуациях их применение позволит администратору сэкономить множество времени. Работа с файлами и каталогамиВозможности работы с файлами и каталогами в WMI являются взаимодополняющими по отношению к объектной модели WSH/FSO. С одной стороны, при помощи WMI нельзя, например, записать информацию в текстовый файл, с другой - в WMI реализованы дополнительные возможности, которых нет в WSH, например, возможность изменить разрешения на файл/каталог, поменять владельца, настроить аудит, узнать, сколько процессов настоящее время открыли этот файл и т.п. Главный класс для работы с файловой системой в WMI - Win32_Directory, который может быть использован для работы как с каталогом, так и с отдельным файлом. Его главные методы:
Работа с журналом событий 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 Дольше секунды блокнот на компьютере пользователя открыт не будет :-). Другие классы для работы с операционной системойНиже перечислены некоторые другие классы для работы с операционной системой:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||