【入門編】【ネットワーク共有自動復旧】WScript.Network で接続切断を検知しネットワークドライブを再割り当てする試行ロジック – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

ネットワーク共有の「死」を看取る――VBScriptによる自動修復という選択

こんにちは。現場の最前線でコードを書き続けてきたエンジニアとして、今日は「ネットワークドライブの切断」という、古くて新しい課題に立ち向かいたいと思います。

「朝出社したら、社内共有サーバーへのドライブが切断されていて、ファイルが開けない」
「VPNが一時的に瞬断して、業務が止まってしまった」

こうした現場の「小さなイライラ」を、VBScriptは魔法のように解消してくれます。今回は、WSH(Windows Script Host)の心臓部である`WScript.Network`オブジェクトを使い、ネットワークの状況を監視・修復する「自己治癒力」を備えたスクリプトを構築しましょう。

1. なぜ「VBScript」なのか?

今どきPythonやPowerShellがあるのに、なぜVBScriptなのか。それは「余計なものを一切インストールさせない」という、企業ネットワークにおける最強の武器だからです。Windowsが動いている環境であれば、メモ帳ひとつで今日からすぐに実装できる。この軽快さと環境を選ばない安定感こそ、VBScriptが今なお現場で愛される理由です。

2. ネットワーク監視のロジック:現状を知る

ネットワークが切れているかどうかを判定するには、`WScript.Network`オブジェクトの`EnumNetworkDrives`メソッドを使います。

これは「現在割り当てられているドライブレター」と「そのパス」をペアで取得するリストです。このリストをループで回し、「目的のドライブレターが存在するか」を確認することで、接続状態を判定します。

実装コード:ネットワーク再接続スクリプト

Option Explicit

‘ — 設定エリア —
Dim targetDrive, targetPath
targetDrive = “Z:” ‘ 監視対象のドライブレター
targetPath = “\\Server\Share” ‘ 接続先UNCパス

‘ — メイン処理 —
If Not IsDriveConnected(targetDrive) Then
WScript.Echo “切断を検知しました。再接続を試みます…”
Call ReconnectDrive(targetDrive, targetPath)
Else
WScript.Echo “接続は正常です。”
End If

‘ 接続状態を判定する関数
Function IsDriveConnected(strDrive)
Dim objNetwork, colDrives, i
Set objNetwork = CreateObject(“WScript.Network”)
Set colDrives = objNetwork.EnumNetworkDrives

IsDriveConnected = False
For i = 0 To colDrives.Count – 1 Step 2
If UCase(colDrives.Item(i)) = UCase(strDrive) Then
IsDriveConnected = True
Exit Function
End If
Next
End Function

‘ 再接続を行う関数
Sub ReconnectDrive(strDrive, strPath)
Dim objNetwork
Set objNetwork = CreateObject(“WScript.Network”)

‘ 念のため一度切断を試みる(ゴースト接続対策)
On Error Resume Next
objNetwork.RemoveNetworkDrive strDrive, True, True
On Error GoTo 0

‘ 再割り当て
objNetwork.MapNetworkDrive strDrive, strPath
WScript.Echo “再接続が完了しました。”
End Sub

3. 現場で陥りやすい「3つの罠」

このコードを書く際、初学者が必ずと言っていいほどハマるポイントがあります。

① 「ゴースト接続」の存在

ネットワークが切れたように見えても、Windows内部ではドライブレターが「死んだ接続」として掴まれていることがあります。これを無視して`MapNetworkDrive`を実行すると、「すでにそのデバイスは使用されています」というエラーで弾かれます。だからこそ、再接続の前に必ず`RemoveNetworkDrive`(強制切断)を挟むのがプロの作法です。

② `On Error Resume Next`の正しい使い方

上のコードで`On Error Resume Next`を使っているのは、切断時にエラーが発生しても処理を止めないためです。しかし、範囲を広げすぎないことが肝心です。エラーを隠すことはデバッグを難しくします。「ここだけはエラーが出てもスルーしていい」という最小限の範囲で使うのが、美しいコードの条件です。

③ 権限の壁(管理者権限)

ネットワークドライブの割り当ては、実行ユーザーの権限に依存します。タスクスケジューラなどで実行する場合、「最上位の特権で実行する」にチェックを入れるか、現在のユーザー権限で適切にログイン状態であることを確認してください。

4. さあ、次のステップへ

このスクリプトを「タスクスケジューラ」に登録し、5分おきに実行するように設定すれば、もうネットワーク障害に怯える必要はありません。

VBScriptをマスターするコツは、「まずは動くものを作り、それを堅牢にする」という繰り返しです。今回紹介したコードは、エラー処理や再接続ロジックを極限までシンプルにした「骨格」です。ここから、ログ出力機能を追加したり、メール通知を飛ばしたりと、自分なりにカスタマイズしてみてください。

ここをクリアしたあなたは、もう「マクロの記録」に頼るだけのユーザーではありません。Windowsそのものを手足のように操る、エンジニアの入り口に立っているのです。

何か詰まったら、いつでも戻ってきてください。応援しています。

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