Дебют функции восстановления в Windows XP стал радостным событием. Я называю эту функцию «сывороткой правды компонентов Windows», поскольку она часто выявляет то, что скрывают пользователи. Например, одна сотрудница как-то пожаловалась мне, что ее рабочая станция не запускается. На вопрос, не устанавливалось ли что-нибудь недавно, она ответила, что установила новую версию антивирусной программы. «Сколько раз вы ее устанавливали?» – спросил я, и получил ответ: «Только один». Однако при загрузке с диска восстановления и при попытке отмены последнего установленного приложения функция восстановления выявила 20 попыток установки антивирусного программного обеспечения! Конечно, эта функция не решит всех проблем, но всегда полезна.

Однако графический интерфейс функции восстановления мне никогда не нравился. К счастью, существует пять команд PowerShell:

  • Enable-ComputerRestore и Disable-ComputerRestore для включения и выключения функции восстановления для данного диска.
  • Checkpoint-Computer для создания новой функции восстановления.
  • Get-ComputerRestorePoint для вывода всех доступных точек восстановления.
  • Restore-Computer для выполнения отмены изменений системы к конкретной точке восстановления.

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

Включение и выключение восстановления системы

С помощью Enable-ComputerRestore и Disable-ComputerRestore можно выбрать диски, защищаемые функцией восстановления. Синтаксис прост и точен: список разделенных запятой дисков, каждый из которых записан как корневой каталог, заключенный в кавычки:

Enable-ComputerRestore «C:\», «D:\»

Для всех отсутствующих в списке дисков функция восстановления системы отключается, поэтому если диск E ранее был защищен, то после выполнения этой команды защита будет выключена. Кроме того, команд для настройки функции восстановления системы, по-видимому, не существует. Допустимые рамки управления ограничиваются тем, что можно сделать в панели управления, хотя редактирование записей в подразделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore позволяет выполнить всю необходимую настройку.

Просмотр имеющихся точек восстановления

Прежде чем выполнять отмену внесенных в систему изменений, необходимо узнать, какие есть точки восстановления. Наиболее простая форма Get-ComputerRestorePoint выглядит так:

Get-ComputerRestorePoint

В сокращенном варианте выходные данные моей системы выглядят следующим образом:

PS C:\> Get-ComputerRestorePoint
CreationTime Description SequenceNumber
— ----------- --------------
3/8/2015 5:12:25 PM Windows Update 89
3/11/2015 1:07:16 PM Test restore point 90
3/11/2015 2:43:17 PM Extra checkpoint 91

Здесь обратите внимание на значение SequenceNumber (порядковый номер), используемое для указания нужной точки восстановления. С помощью параметра -LastStatus команда Get-ComputerRestorePoint также позволяет вывести конечное состояние предыдущей операции восстановления системы:

Get-ComputerRestorePoint -LastStatus

Результатом выполнения этой команды является текстовое сообщение, например: «Данные компьютера были восстановлены до указанной точки восстановления». Это сообщение содержит лишь сведения о результате предыдущей попытки отмены изменений. Может показаться, что это информация о только что выполненной операции, однако это не так.

Выполнение отмены изменений системы

Выбрав нужную точку восстановления, выполняем отмену с помощью команды

Restore-Computer -RestorePoint

В моем примере команда отмены изменений к последней точке восстановления выглядит так:

Restore-Computer -RestorePoint 91

Если вы уверены, что восстанавливать систему нужно по самой последней точке восстановления, то можно воспользоваться комбинацией команд Get-ComputerRestorePoint и Restore-Computer:

Restore-Computer -RestorePoint (Get-ComputerRestorePoint)[-1].sequencenumber

Тем, у кого нет большого опыта работы с массивами PowerShell, запись [-1] может показаться непонятной. Если оставить только то, что находится в круглых скобках, то результатом будет выдача самого последнего порядкового номера. В моем примере это выглядит так:

PS C:\> (Get-ComputerRestorePoint)[-1].sequencenumber
92

Содержимое круглых скобок, то есть Get-ComputerRestorePoint, просто собирает все выходные данные команды. В моем случае система вернула три точки восстановления. Запись в квадратных скобках позволяет указать, которую из трех точек следует выбрать: для выбора первой точки указываем [0], второй – [1], третьей – [2].

Однако хотелось бы иметь универсальный способ выбора самой последней точки восстановления, то есть точки с наибольшим номером массива. В моем примере это – [2], а в случае 46 точек восстановления – [45]. Запись [-1] означает выбор самого последнего элемента массива. Мы уже убедились, что каждая точка восстановления имеет несколько свойств, включая время создания (CreationTime), описание (Description) и порядковый номер (SequenceNumber). Параметр -RestorePoint требует лишь указания числового значения порядкового номера (SequenceNumber), и добавление. sequencenumber возвращает только это значение.

Заметим, что Restore-Computer не выдает запроса на подтверждение выполнения. Чтобы выдавался запрос, добавьте -confirm:$true.

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

Иногда требуется программным путем заставить функцию восстановления системы создать новую точку восстановления – например, если устанавливается подозрительный новый драйвер или обновление Windows. В таких случаях полезно подготовить удобный путь отмены изменений. Новая точка восстановления создается с помощью команды Checkpoint-Computer, для которой через пробел необходимо указать описательное имя, заключаемое в кавычки:

Checkpoint-Computer «Описательное имя»

Опробуйте эти команды, я уверен, что они займут достойное место в вашем инструментарии.