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

スポンサーリンク

破壊的変更からシステムを守る:VBScriptとWMIで実装する「自動復元ポイント生成」の極意

業務自動化エンジニアにとって、最も恐ろしいのは「スクリプトの暴走」だ。数千のファイルを置換し、レジストリを書き換え、データベースを更新する。その最中に予期せぬエラーでプロセスが停止したとき、君の目の前にあるのは「修復不可能な残骸」だ。

VBScriptは古臭い言語だと言われる。だが、Windowsの心臓部(WMI: Windows Management Instrumentation)を直接叩けるこの言語は、OSの深淵を操作するツールとしては今なお最強の一角だ。

今回は、「破壊的な処理を実行する直前に、強制的にシステムの復元ポイントを作成する」という、堅牢なシステム運用のための必須アーキテクチャを伝授する。

なぜ「復元ポイント」をスクリプトに組み込むのか

大規模な環境変更を行う際、多くのエンジニアは「気合」でエラーハンドリングを記述する。しかし、OSレベルの不整合はスクリプトの `On Error Resume Next` では防げない。

WMIの `SystemRestore` クラスを呼び出し、処理開始直前にOSの状態をスナップショットとして保存しておく。これにより、万が一の事態には「システムの復元」から数分前の状態へ安全に巻き戻せる。これはバックアップの基本であり、プロフェッショナルが守るべき最後の防衛線だ。

実践的プロダクションコード:`CreateRestorePoint.vbs`

このコードは、単に動くだけではない。WMI接続の失敗や権限不足を考慮した、保守性の高い設計となっている。

‘ ==============================================================================
‘ 復元ポイント生成スクリプト
‘ 権限: 管理者権限(Administrator)で実行必須
‘ ==============================================================================
Option Explicit

Const BEGIN_SYSTEM_CHANGE = 100
Const RESTORE_POINT_NAME = “Automated_Backup_Before_Task”

If Not IsAdmin() Then
WScript.Echo “エラー: このスクリプトは管理者権限で実行してください。”
WScript.Quit 1
End If

CreateRestorePoint RESTORE_POINT_NAME

Sub CreateRestorePoint(strName)
Dim objWMIService, objRestore, intReturn

‘ WMIサービスへ接続 (SystemRestoreはroot\default配下に存在)
Set objWMIService = GetObject(“winmgmts:{impersonationLevel=impersonate}!\\.\root\default:SystemRestore”)

WScript.Echo “復元ポイントを作成中…”

‘ CreateRestorePointメソッドを呼び出し
‘ 戻り値: 0は成功、それ以外はエラーコード
intReturn = objWMIService.CreateRestorePoint(strName, BEGIN_SYSTEM_CHANGE, 100)

If intReturn = 0 Then
WScript.Echo “成功: 復元ポイント ‘” & strName & “‘ を作成しました。”
Else
WScript.Echo “失敗: 復元ポイント作成エラー (コード: ” & intReturn & “)”
End If
End Sub

‘ 管理者権限チェック用のロジック
Function IsAdmin()
Dim objShell
Set objShell = CreateObject(“WScript.Shell”)
On Error Resume Next
objShell.RegRead “HKEY_USERS\S-1-5-19\”
If Err.Number = 0 Then
IsAdmin = True
Else
IsAdmin = False
End If
On Error GoTo 0
End Function

現場で刺さる「運用の勘所」

コードをコピペして終わりにしてはいけない。業務自動化を成功させるには、以下の3点を意識せよ。

1. 権限の壁(UAC)

このスクリプトは、一般ユーザー権限では絶対に動作しない。実行時には「管理者として実行」を必須とすること。バッチファイルから呼び出す場合は、`runas` コマンドでラップするか、タスクスケジューラで「最上位の権限で実行」オプションを有効にして運用せよ。

2. 処理の間隔(クールダウン)

Windowsは復元ポイントの連続作成を制限している。短時間に何度も実行すると、WMI側がリクエストを拒否することがある。連続稼働するツールであれば、復元ポイント作成の前に「前回の作成から24時間経過しているか」をチェックするロジックを追加することを推奨する。

3. パフォーマンスへの影響

復元ポイントの作成は、ディスクI/Oを大量に消費する。データベースの大量書き込みや、巨大なファイルのコピー中に実行すると、システムのレスポンスが極端に悪化する可能性がある。必ず「処理の開始直前」かつ「システムがアイドル状態であること」を意識して配置せよ。

最後に:エンジニアとしての矜持

VBScriptはレガシーかもしれない。しかし、OSの根本に触れるこの種の処理においては、複雑な依存関係を持つモダンな言語よりも、実行環境(WSH)が保証されていることの強みが光る。

君が書く自動化ツールが、ただの「便利な道具」で終わるか、それとも「過酷な現場を支える堅牢なインフラ」となるか。その差は、こうした「失敗した時の逃げ道」を設計に組み込んでいるかどうかで決まる。

さあ、コードを書き換えろ。そして、恐れずに自動化の先へ進め。

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