先日、セキュリティ機能の検証中にWindowsのレジストリを色々いじっていたところ、OSが正常に起動しなくなる事象が発生しました。復旧のために試行錯誤しましたが上手くいかず、、最終的に復元ポイントを使用して正常な状態に戻すことを選択しました。この経験を通して、改めて復元ポイントの重要さを体感し、機能について詳しく知っておきたいと思い調査することにしました。今回は、調査した内容について記載いたします。
復元ポイントとは
復元ポイントとは、Windowsの状態を監視して、主要なシステムの変更イベントが発生する前や一定のスケジュールされた間隔で自動的に作成されるシステム状態(OSの動作に必要なシステムやプログラムに関連したファイル)の静止点のことを指します。ユーザーは、システム変更の結果として問題が発生した場合に、復元ポイントを使用することで健全な時の状態に戻すことができます。
復元ポイントは、予め割り当てられたディスク領域で管理されます。割り当てられたディスク領域が多いほど複数の世代を管理できるようになり、ディスク領域の空きが無くなった場合はもっとも古い復元ポイントを消去して新しい復元ポイントのスペースを確保します。標準の設定では、以下表(Microsoft 公式ドキュメントより参照)の通り復元ポイントのディスク領域が割り当てられます。
復元ポイントが作成されるシステムの変更イベント
次のいずれかのイベントが発生する前に、復元ポイントが自動的に作成されます。
イベント | 説明 |
---|---|
アプリケーションのインストール | システム復元に準拠したインストーラーを使用するアプリケーションをインストールする前に作成されます。 |
Windows UpdateまたはAutoUpdateのインストール | Windows更新プログラムをインストールされる前に作成されます。 |
システムの復元操作 | ユーザーによる復元操作が開始される前に作成されます。 |
スケジュールされた復元ポイント
復元ポイントは、システムの変更イベント以外にも一定の間隔で作成されるように構成されています。
Windows 7以降のバージョンでは、過去7日間に他の復元ポイントが作成されていない場合にスケジュールされた復元ポイントが自動的に作成されます。(参考程度ですが、Windows Vistaでは24時間ごとに他の復元ポイントが作成されていないかチェックして自動的に作成しておりました。)
また、ユーザー自身が任意のタイミングで復元ポイントを手動作成することも勿論可能です。
復元ポイントの状態確認
Windows端末で現在の復元ポイントの状態を確認する方法について記載します。
復元ポイントの設定を確認
タスクバーの検索ボックスにて「システムの保護」と入力し、「復元ポイントの作成」を選択します。
「保護設定」の内容を確認します。利用できるドライブに対して、保護が「有効」になっていれば復元ポイントが自動的に作成される状態になっています。
なお、Windowsのバージョンやインストールのシナリオによって、標準で有効になっているかどうかは異なります。OEM製の端末であればC:ドライブは標準で有効にカスタマイズされている場合が多いですが、D:ドライブ以降は有効になっていない可能性があります。また、新規でインストールする場合やワイプ及びリセットなどを実施した場合は標準で無効になることが一般的です。(※私の環境においても、過去にワイプを実施した端末は無効になっていました。)
続けて、「保護設定」内の「構成」をクリックします。ここでは、復元ポイントの作成について有効・無効を指定することができます。また、割り当てられたディスク領域を設定することができます。以下画像は、私が普段使用しているWindows 11の標準設定です。10GBが自動的に割り当てられておりました。
以前に作成された復元ポイントを確認
復元ポイントの作成が有効な場合において、以前に作成された復元ポイントを確認する方法を記載します。こちらはGUI画面とPowerShellコマンドの2パターン紹介します。
まず、GUI画面で確認する方法は、「システムの保護」画面にて「システムの復元」をクリックします。
「次へ」をクリックします。
以下画像のように、以前に取得した復元ポイントの一覧を確認することができます。私の環境では9/26に取得していることが確認できました。ディスク割り当て領域の容量制限により1世代分しか保存されていないようです。
確認したら「キャンセル」をクリックして画面を閉じてください。
続いてPowerShellコマンドで確認する方法は、管理者権限でPowerShellを立ち上げて以下コマンドを実行します。
> Get-ComputerRestorePoint
実行した際の出力イメージは以下画像の通りです。
復元ポイントの手動作成
それでは次に復元ポイントを手動作成する方法について、実際に操作しながら確認していきます。
まず、復元ポイントを2世代分管理できるように以下画像の通りディスク領域の割り当てを2%⇒5%へ変更しました。
復元ポイントを手動作成する際は、「システムの保護」画面にて「作成」をクリックします。
復元ポイントの説明を入力して、「作成」をクリックします。
「復元ポイントは正常に作成されました。」と表示されれば完了です。「閉じる」をクリックします。
(私の環境では1分以内で完了しました。)
以前の復元ポイントの確認画面にて、手動で作成した復元ポイントが追加されていることを確認できました。(画面下の方にある「他の復元ポイントを表示する」にチェックを入れる必要があります。)
続いて、PowerShellコマンドで復元ポイントを作成する場合は、以下コマンドを実行します。
> Checkpoint-Computer -Description "復元ポイントの説明"
GUI画面で取得した後すぐに実行したところ、以下の様なエラーが発生して24時間待ちなさいと怒られました。既定では、複数の復元ポイントを作成する場合は24時間の間隔を空ける必要があるようです。
ということで1日待ってから再度実行したところ、以下画像の通り復元ポイントが手動作成できることを確認しました。
以前の復元ポイントの状態に戻す方法
ここからは以前の復元ポイントの状態に戻す方法について記載します。
OSが起動できる場合
まず、OSが起動できる状態の場合に戻す方法について記載します。以前の復元ポイントを一覧表示した画面まで移動して、戻したい復元ポイントを選択して「次へ」をクリックします。
対象のドライブを選択して「完了」をクリックすることで復元が開始されます。
OSが起動できない場合
次に、OSが起動できない状態で戻す方法について記載します。(※こちらはWindowsが正常に起動しない場合に実行することを想定しています。)
まず、「自動修復」画面を起動します。起動時の「エラーメッセージ」が表示されている状態で、電源ボタンを長押しして強制終了させます。これを2回続けて実施します。そうすると、3回目の起動時に「自動修復」画面が立ち上がってきます。(※今回は検証のため、DELL製の端末にてShiftキーを押しながら再起動を実施して起動します。)
「自動修復」画面が起動したら「トラブルシューティング」を選択します。(画像粗くてすみません。。)
「詳細オプション」を選択します。
「システムの復元」を選択します。
もし、BitLockerでディスクの暗号化を実施されている場合は、48桁の回復キーを入力します。
「システムファイルと設定の復元」画面が起動します。ウィザード画面の説明に沿って進めることで以前の復元ポイントを選択して戻すことができます。
復元ポイントの設定をIntuneで制御
最後に、復元ポイントの設定についてIntuneで制御できる項目について確認していきます。
Intune管理センターの「デバイス>構成プロファイル」より、Windows 10以降の「管理用テンプレート」を使用して復元ポイントの設定を行うことができます。確認できました設定箇所は以下表の通りです。
設定名 | パス | 説明 |
---|---|---|
構成をオフにする | \システム\システムの復元 | このポリシー設定を使用すると、システムの保護からシステムの復元の構成を無効にすることができます。[システムの復元をオフにする] ポリシー設定が有効になっている場合、[構成をオフにする] ポリシー設定は上書きされます。 |
システムの復元をオフにする | \システム\システムの復元 | このポリシー設定を使用すると、システムの復元を無効にすることができます。 |
通常は復元ポイントの作成が要求されるデバイス操作の際にシステムの復元ポイントが作成されないようにする | \Windows コンポーネント\Windows インストーラー | このポリシー設定では、通常はシステムの復元ポイントを作成するように要求されるデバイス操作の際に、システムの復元ポイントが作成されないようにすることができます。Windows では通常、署名されていないドライバーのインストールなど、特定のドライバー操作の際に復元ポイントが作成されます。 |
システムの復元ポイントを作成する | \Windows コンポーネント\Microsoft Defender ウイルス対策\スキャン | このポリシー設定を使用すると、毎日、クリーンアップまたはスキャンが実行される前にシステムの復元ポイントを作成できます。 |
システムの復元のチェックポイントの作成をオフにする | \Windows コンポーネント\Windows インストーラー | このポリシー設定を使用すると、アプリケーションをインストールするたびに Windows インストーラーで実行されるシステムの復元チェックポイントの作成が実行されなくなります。 |
以下画像は、私の環境で実際に設定した際のイメージです。システムの保護を有効にし、Windows Defenderによる日々のシステムスキャンが実行される前に復元ポイントが取得されるように設定しました。
Windows 10/11 テンプレートを使用して、Microsoft Intuneでグループ ポリシー設定を構成する
PowerShellスクリプトによるシステムの保護の有効化
上記のIntune構成プロファイルを作成して端末へ適用されたことを確認した後、システムの保護が無効になっていた端末の状態を確認したところ、継続して以下画像の通り無効のままであることを確認しました。
そのため、今回は追加設定としてPowerShellスクリプトを配布し、システムの保護が無効になっている端末の有効化を試みました。設定した際の画面イメージは以下の通りです。
(※「64ビットのPowerShellホストでスクリプトを実行する」を「いいえ」にした場合は、vssadminコマンド(以下のスクリプト参照)が正常に実行できません。これは、32ビットのPowerShellをシステムアカウントで実行している場合、環境変数やアクセス可能なファイルのパスが通常のユーザーアカウントと異なる可能性があり、コマンドを認識できないことが原因です。)
Intune で Windows 10/11 デバイスに対して PowerShell スクリプトを使用する
登録したPowerShellスクリプト「Enable-ComputerRestore2.ps1」の内容は以下の通りです。
以前の復元ポイントが存在するかどうか確認し、存在しない場合は、C:ドライブのシステムの保護を有効化して5%のディスク領域の割り当てを行う設定にしました。
# 復元ポイントを取得しているか確認
$Status = Get-ComputerRestorePoint
# 復元ポイント未取得の場合は「システムの保護」有効化 & ディスクの5%割り当て
if ($null -eq $Status) {
Enable-ComputerRestore -Drive "C:\"
vssadmin resize shadowstorage /For=C: /On=C: /MaxSize=5%
}
端末へPowerShellスクリプトが正常に配布された後、以下画像の通りシステムの保護が有効になったことを確認できました。
さいごに
いかがだったでしょうか?今回は、Windowsの復元ポイントについて調査した内容を記載しました。万が一システムに不具合が生じた場合、復元ポイントを取得していれば元の健全な状態に戻すことができるかもしれません。毎日取得する必要はないかもしれませんが、最低限としてシステムの保護を有効化し、最大7日の間隔で復元ポイントが取得されるように設定しておくことをお勧め致します。