みなさんご存知Windowsが使うファイルシステム”NTFS”にはスナップショット機能があります。これを用いたアプリケーションとして、Windowsには「復元ポイント」という機能があります。GUIでいじるとまあまあ面倒ですが、PowerShellからだと楽に扱えます。レジストリとかシステムファイルいじるときにはバンバンチェックポイントを取って、必要に応じてサクッと復元して良いパソコンライフを送りましょう。口座残高とバックアップの充実は精神の安定の基礎です。
以下、すべてのコマンドは管理者権限で起動したPowerShellで実行してください。Ctrl + Shift を押しながら起動すれば幸せになれます。
チェックポイントを取る
Checkpoint-Computer "CheckpointName"
名前通りチェックポイントを取るコマンドレットです。チェックポイント名は必須です。まあ、チェックポイント名つけないと復元時に困りますからわかりやすい名前をつけましょう。
ちなみに、オプションの RestorePointType を変えても、特にチェックポイント自体の内容の変化は確認できませんでした。おそらく復元時の補助なのでしょう。ドキュメントにも特に違いが書かれていないです。
チェックポイントの一覧を得る
Get-ComputerRestorePoint 応答例 : CreationTime Description SequenceNumber EventType RestorePointType ------------ ----------- -------------- --------- ---------------- 2020/12/19 1:47:34 スケジュールされたチェック… 5 BEGIN_SYSTEM_C… 7 2021/01/05 6:32:43 Installed PS Remote Play. 6 BEGIN_SYSTEM_C… APPLICATION_INSTALL 2021/01/06 18:15:08 BeforeInstallPrinterDriver 7 BEGIN_SYSTEM_C… APPLICATION_INSTALL 2021/01/06 18:45:34 復元の操作 8 BEGIN_SYSTEM_C… 6
こっちだと”RestorePoint”となっています。先のチェックポイントと同義です。コマンドレットで表記ゆれはやめてほしいところです。
チェックポイントから復元する
Restore-Computer 7
ここで指定する番号には Get-ComputerRestorePoint で得られた SequenceNumber を用います。当然再起動が要求されるので、PowerShell以外のアプリケーションを閉じておきましょう。
チェックポイントのファイルを覗く、のは次回(?)
チェックポイント(復元ポイント)の実態はNTFSのShadowCopyです。先の Restore-Computer だとGUIでの復元と同様、システムファイルの類のみが復元されます。ただ、実際のShadowCopyにはドライブがまるっとスナップショットされてます。消しちゃったユーザーのファイルの復元もできます。まあその用途ならファイル履歴のほうが向いているのですが、選択肢は多いほうが精神安定的に良いです。
ShadowCopyを直接いじるコマンドレットは現状存在しないようなので、WMI経由か vssadmin を使ってUNCパスを取得する事になります。気が向いたらこっちも書きます。