Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Программирование для администраторов
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

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 - и то, и другое вместе. У эти классов есть важные методы:

  • Change - возможность изменить любые параметры службы: режим запуска, отображаемое имя, имя пользователя/пароль, от имени которого будет запускаться эта служба, даже заменить исполняемый файл службы (указать новый путь к нему). Поскольку чаще всего меняется режим запуска (например, Internet Connection Sharing на всех компьютерах можно перевести в режим Disabled), то для него предусмотрен отдельный метод ChangeStartMode.
  • Create - возможность из скрипта создать новую службу на компьютере, Delete - соответственно, ее удалить (то же самое можно сделать при помощи утилит Resource Kit);
  • PauseService, ResumeService, StopService, StartService - изменить состояние службы. Проверить, можно ли службу остановить или приостановить, можно при помощи свойств AcceptStop и AcceptPause.

Наиболее часто встречающиеся ситуации для работы со службами:

  • необходимо централизованно изменить пароль для всех служб, работающих от имени определенной учетной записи
  • перевести какую-либо службу (чаще всего ICS и Server) в режим Disabled
  • отследить состояние службы и в случае необходимости ее запустить
  • запустить скриптом те службы, для которых стоит автозапуск, но в настоящее время по каким-то причинам они не работают.

Для всех этих ситуаций используются классы Win32_BaseService. Во многих ситуациях их применение позволит администратору сэкономить множество времени.

Работа с файлами и каталогами

Возможности работы с файлами и каталогами в WMI являются взаимодополняющими по отношению к объектной модели WSH/FSO. С одной стороны, при помощи WMI нельзя, например, записать информацию в текстовый файл, с другой - в WMI реализованы дополнительные возможности, которых нет в WSH, например, возможность изменить разрешения на файл/каталог, поменять владельца, настроить аудит, узнать, сколько процессов  настоящее время открыли этот файл и т.п. Главный класс для работы с файловой системой в WMI - Win32_Directory, который может быть использован для работы как с каталогом, так и с отдельным файлом. Его главные методы:

  • Copy и CopyEx (расширенная версия, отличается возможностью включить/отключить рекурсию и более точно определить место возникновения ошибки) - копирование каталога/файла;
  • Delete/DeleteEx, TakeOwnerShip/TakeOwnershipEx, Compress/CompressEx, Uncompress/UncompressEx, Rename - комментариев не требуют;
  • ChangeSecurityPermissions и ChangeSecurityPermissions - возможность поменять разрешения для файла.
Работа с журналом событий 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

Дольше секунды блокнот на компьютере пользователя открыт не будет :-).

Другие классы для работы с операционной системой

Ниже перечислены некоторые другие классы для работы с операционной системой:

  • Win32_Share - позволяет создавать, удалять и настраивать параметры общих каталогов на компьютере. Настройка разрешений производится при помощи класса Win32_LogicalShareSecuritySetting;
  • Win32_StartupCommand - возможность посмотреть, какие команды выполняются при запуске Windows с информацией о том, из какой ветви реестра производится их запуск;
  • Win32_Account, Win32_UserAccount, Win32_Group - возможность получить доступ к учетным записям - локальным, если обращение идет к обычному компьютеру, или доменным, если обращение идет к контроллеру домена. В отличие от ADSI, при помощи этих объектов вы не сможете вносить изменения учетные записи - они предназначены только для чтения информации и мониторинга;
  • Win32_BootConfiguration - возможность получить информацию о параметрах загрузки Windows (все доступно только на чтение).

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru