Чтение онлайн

ЖАНРЫ

Недокументированные и малоизвестные возможности Windows XP

Клименко Роман

Шрифт:

exit sub

 else

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

'if … else используются конструкции select case. В остальном дальше

'код довольно простой, поэтому описывать его мы не будем.

select case StopSR

case "N"

If (obj.Disable(Drive)) = 0 Then

objTextFile.WriteLine " : SystemRestore для диска " & Drive & " успешно остановлена"

Else

objTextFile.WriteLine " :
Внимание!!! SystemRestore для диска " & Drive & " остановить не удалось"

End If

case "Y"

If (obj.Enable(Drive)) = 0 Then

objTextFile.WriteLine " : SystemRestore для диска " & Drive & " успешно запущена"

Else

objTextFile.WriteLine " : Внимание!!! SystemRestore для диска " & 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")

При этом вместо имени компьютера можно использовать точку. В этом случае вы опять будете подключаться к локальному компьютеру.

Напоследок несколько возможных команд запуска приведенного сценария:

■ cscript d: \sr.vbs — полностью отключить возможность восстановления системы (если диск C: является системным);

■ cscript d:\sr.vbs c:\ Y — полностью включить возможность восстановления системы (если диск C: является системным);

■ cscript d:\sr.vbs D:\ N — отключить SystemRestore только на диске D:.

Создание контрольной точки восстановления

Продолжим рассмотрение темы восстановления системы и опишем код для автоматического создания точки восстановления. На этот раз будет приведена только часть кода, отвечающая за работу WMI, а не весь код сценария, то есть обращение к моникеру winmgmts и работа с классом. Вы самостоятельно можете модифицировать приведенный выше код для того, чтобы он мог, например, автоматически включать работу SystemRestore, если возможность восстановления системы отключена, а потом уже выполнять создание контрольной точки восстановления.

Листинг 11.2 Создание контрольной точки восстановления

Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/ default:SystemRestore")

'С помощью данной функции и создается точка восстановления.

'Функция
имеет три параметра, первый из которых определяет описание

'создаваемой точки восстановления и возвращает код ошибки в случае

'неудачной попытки создания. Нам этот код не нужен,

'но тем не менее его необходимо поместить в любую переменную.

'Если вы будете записывать сведения о создании точки в журнал,

'то данный код может понадобиться.

ErrorSRCode = obj.CreateRestorePoint("Точка восстановления от " & Time, 0, 100)

Энумерация содержимого ветви реестра

Стандартные методы объекта, предназначенные для доступа к системному реестру (WScript.CreateObject("Wscript.Shell") ), один из которых, позволяющий считывать значения параметров из реестра, был рассмотрен в примере сценария для включения/отключения восстановления системы на логических дисках компьютера, позволяют выполнить базовые операции с реестром.

Но данный объект имеет один очень большой недостаток — с его помощью нельзя перечислить все параметры, расположенные в определенной ветви реестра. Этот недостаток ограничивал возможности применения сценариев сервера сценариев Windows, поэтому просто нельзя не рассказать о новом свойстве инструментария Windows, которое выполняет именно эту операцию.

ПРИМЕЧАНИЕ

Это может понадобиться в том случае, если необходимо значение не конкретного параметра реестра, а всех параметров одной ветви. При этом точно не известно, какие именно параметры могут находиться в данной ветви. 

За выполнение перечисления параметров, расположенных в ветви реестра, отвечает метод EnumValues, принадлежащий классу StdRegProv. Данный класс определяет методы для доступа к реестру Windows XP (более функциональный аналог стандартного объекта Windows, рассмотренного выше) и принадлежит к пространству имен Root\Default. Мы не будем создавать целый работоспособный сценарий для описания работы данного метода — лучше создадим отдельную процедуру, которая будет выполнять перечисление параметров указанной ветви реестра, а также проверим ее работу с помощью записи в файл журнала выводимых значений. 

Листинг 11.3. Энумерация параметров ветви реестра

set objFS = CreateObject("Scripting.FIleSystemObject")

'Для вывода списка содержащихся в ветви реестра параметров мы будем

'использовать файл. В нашем случае – файл enum_log.txt на диске d:\..

set objTextFile = objFS.CreateTextFile("d:\enum_log.txt", 8, True)

'подключаем объект

Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/Default:StdRegProv")

'Переменная RootKey будет определять корневой раздел ветви, параметры

'которой мы будем перечислять. При этом корневые разделы идентифицируются

'в соответствии с правилами, определеннымивфайле Winreg.h. В файле

'определены следующие корневые разделы: HKEY_CLASSES_ROOT (0x80000000),

'HKEY_CURRENT_USER (0x80000001), HKEY_LOCAL_MACHINE (0x80000002),

'HKEY_USERS (0x80000003), HKEY_CURRENT_CONFIG (0x80000005), HKEY_DYN_DATA

Поделиться с друзьями: