【入門編】【ネットワークパス非同期監視】FileSystemObjectとSleepループを用いた共有フォルダ接続状態の自動リカバリ – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptで構築する「不屈の監視システム」:共有フォルダ接続の自動リカバリ術

こんにちは。現場の最前線でコードを書き続けているエンジニアです。

今日は、安定しないネットワーク環境下でも「黙々と働き続ける」堅牢なスクリプトの作り方を教えます。皆さんが業務でよく使う「共有フォルダ」。これがネットワークの瞬断で使えなくなり、朝一番にエラーで止まっているスクリプトを見て溜息をついた経験はありませんか?

今日は、VBScript (WSH) を使い、接続が切れたら自ら再接続を試みる、まるで「不屈の番人」のようなスクリプトを構築しましょう。

—

1. なぜ「監視」が必要なのか?

Windowsのファイル操作において、`FileSystemObject (FSO)` は非常に強力です。しかし、FSOは「その場にあるファイル」を扱うには優秀ですが、「ネットワークの切断」という動的な変化には無力です。

通常、接続が切れるとスクリプトは容赦なく「実行時エラー」を吐いて終了します。これを防ぐために、私たちは「接続チェック」と「待機(Sleep)のループ」を組み合わせた監視ロジックを実装する必要があります。

—

2. 構築する監視モジュールの全体像

今回作るスクリプトのロジックは非常にシンプルです。

1. 監視: 指定フォルダにアクセスを試みる。
2. 判定: 失敗したら「異常」とみなし、リトライ処理へ移行。
3. 待機: `WScript.Sleep` を使い、ネットワークに負荷をかけないよう一時停止。
4. リカバリ: 接続が回復するまで(またはリトライ回数上限まで)繰り返す。

—

3. 実装コード:不屈の監視モジュール

以下のコードを `Monitor.vbs` として保存してください。

Option Explicit

‘ — 設定項目 —
Dim targetFolder, retryInterval, maxRetries
targetFolder = “\\Server\SharedFolder\Data” ‘ 監視対象のパス
retryInterval = 5000 ‘ リトライ間隔(ミリ秒)
maxRetries = 10 ‘ 最大リトライ回数

‘ — メイン処理 —
Dim fso, isConnected, retryCount

Set fso = CreateObject(“Scripting.FileSystemObject”)
isConnected = False
retryCount = 0

Do While Not isConnected
‘ FolderExistsはTrue/Falseを返すため、エラーを抑止しやすい
If fso.FolderExists(targetFolder) Then
WScript.Echo “接続確認完了: ” & Now
isConnected = True
Else
retryCount = retryCount + 1
WScript.Echo “接続失敗… ” & retryCount & “回目の再試行待機中”

If retryCount >= maxRetries Then
WScript.Echo “致命的エラー: リトライ上限に達しました。”
WScript.Quit 1
End If

‘ 指定時間だけスリープ(CPU負荷を抑えるための重要ポイント)
WScript.Sleep retryInterval
End If
Loop

‘ ここから先の処理に、本来やりたかったファイル操作を記述します
WScript.Echo “監視成功!処理を開始します。”
Set fso = Nothing

—

4. コードの「深淵」を読み解く:知っておくべき3つのポイント

① `FolderExists` の賢い使い方

多くの初心者は、いきなり `fso.GetFolder(path)` を実行してエラーを発生させます。`GetFolder` は存在しないパスに対して例外を投げますが、`FolderExists` は 「存在するかどうか」という真偽値(Boolean)を返すだけなので、スクリプトをクラッシュさせずに条件分岐が可能です。

② `WScript.Sleep` の重要性

「無限ループ」を回すとき、何も待機させないとCPU使用率が100%に張り付いてPCが重くなります。`WScript.Sleep` は、OSに対して「この間は私の優先度を下げていいよ」と伝えるための魔法のメソッドです。

③ エラーハンドリングの意識

今回のコードは `FolderExists` を使っていますが、より詳細なエラーハンドリングが必要な場合は `On Error Resume Next` を併用します。しかし、多用すると「何が起きたか分からなくなる」ので、最初は上記のように「存在確認」から始めるのが安全です。

—

5. 初学者が陥りやすい罠

  • パスの形式: ネットワークパスは必ず `\\` から始まるUNCパスである必要があります。ドライブレター(Z:\など)はPCごとに環境が異なるため、スクリプトの移植性を考えるとUNCパスの使用を強く推奨します。
  • 権限の問題: スクリプトを実行しているユーザーに、その共有フォルダへのアクセス権があるか必ず確認してください。VBScriptは「実行している人の権限」で動きます。

—

最後に:ここをクリアすれば、あなたはもう「自動化のプロ」

このスクリプトは、単なる「ファイルチェック」以上の価値があります。「外部環境の変化を恐れず、自分を律して回復を待つ」という考え方は、大規模なシステム自動化においても変わらない本質です。

ここをマスターできれば、次は「ログ出力機能」や「メール通知機能」を付け加えるのも簡単です。VBScriptは古い言語だと言われますが、Windows環境でこれほど軽量でパワフルな武器はありません。

ぜひ、あなたの現場でこの「不屈の番人」を走らせてみてください。応援しています!

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