Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Всё о работе в Интернет" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Секреты Windows: статьи о реестре, rundll32.exe, программах Недокументированные возможности Windows XP. MMC. Часть 4
Другие наши рассылки: Новости нашего сайта:
Продолжение, начало в выпусках: 1 2 3 В конец записи
оцените: 1 2 3 4 5 Книга "Недокументированные возможности Windows XP. Библиотека пользователя", Глава 3. Консоль управления Microsoft. Часть 4. Оснастки Windows XP: Управляющий элемент WMI, начало Оснастка УПРАВЛЯЮЩИЙ ЭЛЕМЕНТ WMI содержит в себе настройки инструментария управления Windows (WMI), с помощью которого можно удаленно или локально управлять различными настройками операционной системы Windows. WMI реализовано на основе протокола WBEM (протокол управления предприятием на основе веб-технологий) и включает в себя CIM-совместимую базу данных (CIMOM), содержащую в себе сведения об объектах системы, а также диспетчер CIM, с помощью которого реализованы функции работы с поставщиками WMI. Поставщики WMI являются посредниками между WMI и компонентами компьютера. Именно с их помощью реализуются такие возможности, как считывание, оповещение о событии и изменение данных состояния компонентов компьютера. Сама же возможность WMI может применяться как в программировании под Windows с помощью WinAPI, так и при создании скриптов сервера сценариев Windows. Также возможности WMI используются в компонентах СВОЙСТВА СИСТЕМЫ, СВЕДЕНИЯ О СИСТЕМЕ и для формирования вкладки ЗАВИСИМОСТИ диалога свойств конкретной службы в оснастке СЛУЖБЫ. Именно база данных CIMOM и содержит в себе всю информацию о компонентах компьютера, установленных на компьютере программах и многом другом. Информация в базе CIMOM компьютера обновляется при каждом входе в систему или подключении к WMI. Свойства WMI
Для работы оснастки УПРАВЛЯЮЩИЙ ЭЛЕМЕНТ WMI необходимо, чтобы в системе был зарегистрирован GUID-номер {5C659257-E236-11D2-8899-00104B2AFB46}. Именно этот GUID-номер и идентифицирует настройки оснастки УПРАВЛЯЮЩИЙ ЭЛЕМЕНТ WMI. Данная оснастка входит в состав консоли ИНФРАСТУКТУРА УПРАВЛЕНИЯ WMI, открыть которую можно с помощью команды WMIMGMT.MSC. После ввода данной команды перед вами отобразится пустое окно консоли, содержащее единственный элемент дерева консоли — ЭЛЕМЕНТ УПРАВЛЕНИЯ WMI (ЛОКАЛЬНЫЙ). Контекстное меню данного элемента содержит в себе две основные команды: ПОДКЛЮЧЕНИЕ К ДРУГОМУ КОМПЬЮТЕРУ… и СВОЙСТВА. Первая из этих команд предназначена для просмотра WMI удаленного компьютера, а вторая команда позволяет просмотреть настройки WMI локального компьютера. После выбора команды СВОЙСТВА перед вами отобразится диалоговое окно, подобное приведенному на рисунке 3.21. Рисунок 1 Рис. 3.21. Свойства WMI На вкладке ОБЩИЕ диалога свойств отображается общая информация о компьютере к WMI которого вы подключились. Также с помощью данной вкладки можно изменить учетную запись, от имени которой вы выполнили подключение. Для этого предназначена кнопка ИЗМЕНИТЬ. На вкладке ВЕДЕНИЕ ЖУРНАЛА можно определить путь к журналам событий WMI, его размер, а также сведения, которые будут помещаться в эти журналы. На вкладке АРХИВИРОВАНИЕ И ВОССТАНОВЛЕНИЕ можно вручную выполнить такие операции, как архивирование или восстановление CIM-совместимой базы данных WMI. На вкладке ДОПОЛНИТЕЛЬНО можно определить пространство имен WMI, используемое по умолчанию при разработке сценариев (если конкретное пространство имен указано не было). На вкладке БЕЗОПАСНОСТЬ можно определить права доступа для различных пространств имен WMI. По умолчанию администраторы имеют полный доступ ко всему пространству имен, а остальным группам пользователей разрешен только доступ на выполнение методов пространства имен. Если читатель знаком с программированием на языке С++, тогда ему известен термин ПРОСТРАНСТВО ИМЕН. Это логическое объединение различных функций, переменных, классов и т.д., направленное на улучшение структурированности кода и исключение конфликтов между функциями, имеющими одинаковые названия. В контексте WMI с помощью пространства имен реализована также и система безопасности. То есть, если пользователю запрещен доступ к одному из пространств имен, тогда он не сможет использовать функции, которые были описаны в этом пространстве имен. Настройки WMI в реестре
В предыдущем разделе мы вкратце рассмотрели настройки WMI, которые можно изменить с помощью диалога СВОЙСТВА: ЭЛЕМЕНТ УПРАВЛЕНИЯ WMI (ЛОКАЛЬНЫЙ). Теперь же давайте рассмотрим настройки WMI, доступ к которым нам предоставляет реестр Windows XP. Все эти настройки содержатся в ветви реестра HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WBEM.
Также в реестре существует ветвь HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WBEM\SCRIPTING. Значения данной ветви определяют настройки взаимодействия WMI и сервера сценариев Windows. Например, данная ветвь может содержать следующие параметры.
Доступ к WMI с помощью сервера сценариев
Полное понимание WMI невозможно без знания тех возможностей, которые она предоставляет администратору. Поэтому давайте рассмотрим сейчас некоторые примеры написания скриптов сервера сценариев Windows с использованием возможностей WMI. Данный раздел не описывает работу с сервером сценариев — предполагается, что вы уже знаете, что это такое, и как писать простые скрипты на языках VBScript или JScript. Просто, здесь будет дано несколько примеров скриптов, на основе которых можно представить, какие возможности открываются перед администратором при использовании WMI, а также будет дана ссылка на один интересный каталог файловой системы Windows, содержащий в себе список всех функций, реализованных в пространствах имен, и краткое описание этих функций. Итак, сервер сценариев Windows является объектно-ориентированным языком. То есть, при написании скриптов, в них можно подключать различные объекты (содержащие в себе описания методов, реализующих различные возможности работы с операционной системой), а также моникеры (COM-механизм для обеспечения привязки к COM-объекту, например, к базе данных WMI). Скрипты сервера сценариев можно писать либо на языке VBScript, либо на языке Jscript. Мы же с вами для рассмотрения примеров воспользуемся языком VBScript. Есть два способа запуска скриптов сервера сценариев Windows — либо с помощью двойного щелчка на файле (или с помощью команды wscript.exe), либо с помощью команды cscript.exe. Программа cscript.exe предназначена для работы со скриптом из командной строки и ее плюсом является возможность указания опций работы скрипта (если скрипт обрабатывает опции). Описанные ниже примеры, как правило, используют опции командной строки, поэтому для их использования лучше воспользоваться программой cscript.exe. Включение и выключение SystemRestore для отдельных дисков Давайте рассмотрим первый пример тех возможностей, которые предоставляет администратору WMI. В этом примере мы воспользуемся классом SYSTEMRESTORE, описанным в пространстве имен ROOT/DEFAULT для реализации возможности отключения или включения восстановления системы на отдельных дисках с помощью сервера сценариев Windows. Данный пример, кроме доступа к WMI, по возможности будет содержать в себе реализацию основных возможностей объектов сервера сценариев, а также подробное объяснение, для чего мы записываем ту или иную строку скрипта. Листинг 3.01. Отключение или включение восстановления системы на отдельном диске 'Для работы данного скрипта используются возможности объектов Windows '(работа с реестром и файловой системой) поэтому перед обращением к 'этим возможностям, нужно объявить в скрипте объекты, в которых они описаны 'Сейчас мы объявляем объект для работы с файловой системой Windows, он 'нам понадобится для возможности записи в файл сведений об отключении 'SystemRestore set objFS = CreateObject("Scripting.FIleSystemObject") 'После объявления объекта, нам необходимо открыть текстовый файл '(например, файл sr_log.txt, расположенный в каталоге d:\) 'для записи (если файл не сущестует, тогда он будет автоматически создан). 'В этот файл будет записываться информация о работе скрипта set objTextFile = objFS.OpenTextFile("d:\sr_log.txt", 8, True) 'Теперь мы объявляем объект для работы с реестром Windows. 'Он нам понадобится для доступа к параметру, указывающему, включена ли 'в данный момент возможность SystemRestore set objREG = WScript.CreateObject("Wscript.Shell") 'Теперь мы объявляем объект, с помощью которого можно обработать 'передаваемые в скрипт опции командной строки. Наш скрипт будет 'использовать опции командной строки для определения того, что же 'ему нужно делать. При этом, полная строка запуска нашего скрипта 'будет выглядеть так: cscript «путь к файлу скрипта и его имя» «значок 'диска» «если эта опция равна Y, тогда SystemRestore на диске будет 'включена, если же значение этой опции равно N, тогда отключена». 'Если опции не заданы (например, скрипт запускается двойным щелчком на 'его значке), тогда будут применяться опции по умолчанию: будет 'отключаться возможность SystemRestore на диске c:\. Set Args = wscript.Arguments 'Теперь мы проверяем, использовали ли при запуске скрипта опцию значка диска '(первую опцию). Если не использовали, тогда будет работать с диском c:\ If Args.Count() > 0 Then Drive = Args.item(0) Else Drive = "c:\" End If 'Теперь мы проверяем использование при запуске скрипта второй опции If Args.Count() > 1 Then StopSR = Args.item(1) Else StopSR = "N" End If 'При каждом запуске даннного скрипта мы будем вести лог его работы. 'Каждый лог, как правило, начиенается с даты и времени, когда скрипт 'был запущен — именно эту информацию мы и добавляем в открытый ранее 'файл. Для этого мы используем метод Write, чтобы серевер сценариев 'не переходил на следующую строчку лог-файла после занесения в него 'даты и вермени objTextFile.Write Date() & " в " & Time() 'Сейчас мы вызываем главную функцию программы, описанную ниже в скрипте. 'Главный код программы был реализован в виде функции, чтобы показать 'читателю большинство возможностей сервера сценариев Windows call sronoff() 'А вот и главная функция программы (которая будет называться sronoff). 'Именно эта функция отключает или включает SystemRestore на определенном 'диске. Реализация частей кода скрипта в виде функций позволяет использовать 'его возможности по максимуму. Например, такой подход позволяет завершать 'работу скрипта в любое время, не зависимо от оставшегося для 'обработки кода, или использовать для каждой части кода свои 'методы обработки ошибок. private sub sronoff() 'ВНИМАНИЕ, ИМЕННО СЕЙЧАС МЫ ПОДКЛЮЧАЕМСЯ К WMI с помощью моникера winmgmts. 'Здесь мы подключаемя к пространству имен root/default локального компьютера 'и объвляем класс SystemRestore этого пространства c имитацией прав 'доступа (impersonate). Если вам запрещен доступ к пространству 'имен root/default, тогда вы не сможете объявить класс SystemRestore 'Помните, выше мы рассматривали параметры реестра, для определения порогов 'передачи объектов от поставщиков WMI. Именно передачей объектов мы и 'пользуемся в данный момент. Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore") 'Чуть ниже мы считываем с реестра значение параметра. Особенность 'скриптов состоит в том, что скрипт будет выдавать ошибку, если параметра, 'значение которого мы считываем, не существует в реестре. Чтобы скрипт 'не завершался ошибкой, мы подавляем возможность выдачи ошибок. 'То есть, приведенная ниже строка говорит серверу сценариев о том, что 'в случае возникновения ошибки он должен дальше обрабатывать скрипт, 'не обращая внимания на возникшую ошибку ON ERROR RESUME NEXT 'Именно сейчас мы и работаем с реестром. Мы считываем значение 'параметра DisableSR. Если значение данного параметра равно 1, 'тогда SystemRestore полностью отключен на всех дисках и наш 'скрипт в любом случае не будет работать со всеми дисками, 'кроме системного dasableSR = objREG.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore\DisableSR") 'Если параметр, значение которого мы считываем, не существует в 'реестре, тогда компилятор запишет в специальнуй объект err 'код ошибки, равный -2147024894 (именно ошибка с этим кодом и возникает 'в том случае, если параметр реестра, к которому мы пытаемся 'получить доступ, в реестре отстусвует). Если действительно произошла 'ошибка с данным кодом, тогда SystemRestore на компьютере отключена 'то есть, все попытки включения/отключения дисков, отличных от систменого '(ниже под c:\ понимается системный диск) будут неудачны 'Ниже в скрипте будет присутсвавать еще одно устловие, выполняющее те же 'действия, что и это. Работа с объектом для хранения ошибок была описана 'лишь для примера, так как в скриптах сервера сценариев Windows это 'единственный способ определить, присутствует ли в реестре конкретный 'параметр if (err.Number = -2147024894) and (Drive <> "c:\") then objTextFile.WriteLine " : Параметр DisableSR отсутсвует в реестре. \ Значит SystemRestore отключена и ее вкладка отсутствует в Свойства: Система" 'выходим из функции, а поскольку эта функция главная, тогда завершается 'и работа скрипта. То есть, дальнейший код скрипта выполняться не будет, 'если мы пытаемся включить/отключить несистемный диск, если сама возможность 'System Restore отключена exit sub End if 'Под диском C:\ понимается системный диск, поэтому если вашим системным 'диском является не диск c:\, тогда букву нужно заменить. Особенность 'работы SystemRestore заключается в том, что в случае остановки 'SystemRestore на системном диске, SystemRestore автоматически 'останавливается на всех дисках компьютера и параметр DisableSR становится 'равен 1. Именно поэтому запросы на включение/выключение SystemRestore 'на отличных от системного диска дисков не обрабатываются при значении 'параметра DisableSR, равном 1 (эти запросы работать не будут). При 'этом, системный диск запросы обрабатывать может — если SystemRestore на 'нем будет включена, тогда параметр DisableSR станет равным 0, а значит, 'будет включена и сама возмодность Автоматического восстановления. 'Именно поэтому ниже системный диск и исключается из условного выполнения. if (dasableSR > 0) and (Drive <> "c:\") then objTextFile.WriteLine " : Работа SystemRestore на всех дисках была отключена" exit sub else 'Для облегчения читаемости приведенного кода вместо условных конструкций 'if...else используются конструкции select case. А в остальном, дальше 'код довольно простой, поэтому описывать его мы не будем select case StopSR case "N" If (obj.Disable(Drive)) = 0 Then objTextFile.WriteLine " : Для диска " & Drive & " успешно остановлена" Else objTextFile.WriteLine " : Для диска " & Drive & " остановить не удалось" End If case "Y" If (obj.Enable(Drive)) = 0 Then objTextFile.WriteLine " : Для диска " & Drive & " успешно запущено" Else objTextFile.WriteLine " : Для диска " & Drive & " запустить не удалось" End If End Select End if 'Считается хорошим тоном закрывать в скриптах текстовые файлы, открытые 'до этого. Именно этим и занимается приведенная ниже строка. objTextFile.Close end sub Вот в принципе и все. Приведенный на листинге скрипт очень подробно описан, поэтому больше мы его описывать не будем. Для запуска данного скрипта необходимо иметь права администратора на локальном компьютере, иначе вы не сможете получить доступ к WMI. Если немножко изменить данный скрипт, тогда можно будет подключиться не к локальному компьютеру, а к любому другому компьютеру сети. Для этого нужно строчку Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore") земенить на строчку Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!\\«имя компьютера»\root\default:SystemRestore"). При этом вместо имени компьютера можно использовать точку. В этом случае вы опять будете подключаться к локальному компьютеру. И напоследок несколько возможных команд запуска приведенного скрипта:
Продолжение следует Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=144
|
В избранное | ||