'позволяет завершать работу сценария в любое время, независимо от
'оставшегося для обработки кода, или использовать для каждой части
'кода свои методы обработки ошибок.
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 на компьютере отключена,
'то есть все попытки включения/отключения дисков, отличных от системного
'(ниже под С:\ понимается системный диск), будут неудачны.
'Ниже в сценарии будет присутствовать еще одно условие, выполняющее те же
'действия, что и это. Работа с объектом для хранения ошибок была описана
'лишь для примера, таккак в сценариях сервера сценариев Windows это
'единственный способ определить, присутствует ли в реестре конкретный
'параметр.
if (err.Number = –2147024894) and (Drive <> "c:\") then
objTextFile.WriteLine " : Параметр DisableSR отсутствует в реестре. Это значит, что SystemRestore отключена и вкладка для ее настройки отсутствует в диалоге Свойства системы"
'Выходим из функции, а поскольку эта функция главная, то завершается
'и работа сценария. Иными словами, дальнейший код сценария
'выполняться не будет, если мы пытаемся включить/отключить несистемный
'диск, если сама возможность SystemRestore отключена.
exit sub
End if
'Под диском C:\ понимается системный диск, поэтому если вашим системным
'диском является не диск С:\, то букву нужно заменить. Особенность
'работы SystemRestore заключается в том, что в случае остановки
'SystemRestore на системном диске SystemRestore автоматически
'останавливается на всех дисках компьютера и параметр DisableSR становится
'равен 1. Именно поэтому запросы на включение/выключение System Restore
'на отличных от системного диска дисках не обрабатываются при значении
'параметра DisableSR, равном 1 (эти запросы работать не будут). При
'этом системный диск запросы обрабатывать может – если SystemRestore на
'нем будет включена, то параметр DisableSR станет равным 0, а значит,
'будет включена и сама возможность автоматического восстановления.
'Именно поэтому ниже системный диск исключается из условного выполнения.
if (dasableSR > 0) and (Drive <> "c:\") then
objTextFile.WriteLine " : Возможность работы SystemRestore на всех дисках была отключена"
exit sub
else
'Для облегчения читаемости приведенного кода вместо условных конструкций
Читать дальше