【入門編】【システム復元ポイント作成】WMI SystemRestore クラスを活用したスクリプト実行直前の自動バックアップ制御 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptで「失敗を恐れない」自動化を。復元ポイント作成による安全な環境制御術

こんにちは。現場で日々、自動化の壁と戦っている皆さんに、今日は少し「プロの流儀」をお伝えします。

大規模な設定変更や複雑なファイル操作を行うとき、最も恐ろしいのは「スクリプトの暴走」ですよね。何千行もの設定を一気に書き換えた後で、「あ、ここが違った」と気づいても、手動で元に戻すのは至難の業です。

そこで今回伝授するのは、「スクリプト実行の直前に、自動的にWindowsのシステムの復元ポイントを作成する」という防御策です。これさえあれば、どれだけ大胆な自動化にも、安心して挑戦できるようになります。

なぜ今、VBScriptなのか?

「今の時代、PythonやPowerShellがあるのに、なぜVBScript?」と思うかもしれません。答えはシンプルです。「Windowsがある限り、どこにもインストールせず、メモ帳一つで即座に動かせるから」です。

環境依存を嫌うインフラ運用の現場において、VBScriptは今なお最強の「ポータブル・オートメーション・ツール」なのです。

魔法の鍵:WMI (Windows Management Instrumentation)

今回の核となるのは、Windowsの管理機能である「WMI」です。特に `SystemRestore` クラスは、システムの復元ポイントを制御するための直接的なインターフェースを提供しています。

【完成コード】復元ポイント作成スクリプト

以下のコードを、拡張子 `.vbs` で保存して実行してみてください。

‘ =================================================================
‘ 復元ポイント作成スクリプト
‘ 実行には管理者権限が必要です
‘ =================================================================

Option Explicit

Dim objSWbemServices, objSystemRestore
Dim strDescription
Dim intResult

‘ 1. 復元ポイントの名前を指定(任意)
strDescription = “自動バックアップ: スクリプト実行前_” & Now

‘ 2. WMIサービスに接続
Set objSWbemServices = GetObject(“winmgmts:\\.\root\default”)
Set objSystemRestore = objSWbemServices.Get(“SystemRestore”)

‘ 3. 復元ポイントを作成 (0=APPLICATION_INSTALL, 100=MODIFY_SETTINGS)
‘ CreateRestorePoint(記述, イベントタイプ, シーケンスタイプ)
intResult = objSystemRestore.CreateRestorePoint(strDescription, 0, 100)

‘ 4. 結果の判定
If intResult = 0 Then
WScript.Echo “成功: 復元ポイント [” & strDescription & “] を作成しました。”
Else
WScript.Echo “エラー: 復元ポイントの作成に失敗しました。コード: ” & intResult
‘ 管理者権限で実行しているか確認してください
End If

プロが教える「陥りやすい罠」と回避の知見

コードを動かしてみて、「エラー」が出た場合、それはスクリプトのせいではなく、Windowsのセキュリティルールによるものがほとんどです。以下の3点を必ず確認してください。

1. 管理者権限の壁

WMIでシステムの深部に触れる以上、「管理者として実行」は必須です。スクリプトを右クリックして実行するのではなく、コマンドプロンプトを「管理者として実行」し、そこから `cscript script_name.vbs` と叩くのが、エンジニアの作法です。

2. 頻度制限(スロットリング)

Windowsは、復元ポイントを短時間に連続して作成することを嫌います(ディスク消費を防ぐため)。連続でテストする場合は、前回作成から24時間経過しているか、あるいは `SystemRestore` の設定を確認してください。

3. オブジェクトのライフサイクル

今回のコードでは `Set` キーワードでオブジェクトを生成していますね。VBScriptにおいて、これら(COMオブジェクト)はメモリを消費します。小規模なスクリプトなら自動解放されますが、大規模な処理の中では、最後に `Set obj = Nothing` と記述してメモリを解放する癖をつけると、メモリリーク知らずの堅牢なコードになります。

次のステップへ

このスクリプトを、あなたが行いたい自動化処理の「先頭」に組み込んでみてください。

1. 復元ポイント作成
2. (ここにあなたのメイン処理を書く)
3. 成功すれば終了、失敗すれば復元ポイントから戻す

この「守り」の意識を持つだけで、あなたの書く自動化スクリプトの信頼性は劇的に向上します。初学者のうちは「動けばいい」と考えがちですが、「失敗した時のリカバリまで設計する」ことこそが、プロの自動化エンジニアへの第一歩です。

さあ、恐れることはありません。このスクリプトをあなたの武器にして、Windowsという広大なシステムの庭を、思い通りに手入れしていきましょう。

もしコードが動かなかったり、さらなる応用を知りたいときは、いつでも聞いてくださいね。応援しています。

タイトルとURLをコピーしました