VBScriptの深淵なる世界へようこそ。私はこれまで数多のシステムを自動化の力で蘇らせてきた、チーフアーキテクトだ。君が今、このページを読んでいるということは、きっと業務の中で「ネットワークドライブ」という、時に非常に便利な、時に非常に厄介な存在と格闘している最中なのだろう。
「切断されました」と表示されたネットワークドライブ。エクスプローラーからはアクセスできない。再接続しようにもエラーになる。こんな状況、一度は経験したことがあるはずだ。手動で右クリックして「切断」し、もう一度「ネットワークドライブの割り当て」から設定し直す。この一連の作業、正直なところ、手間だし、スマートじゃない。
今日のテーマは、まさにその悩みを根底から解決し、君の業務を一段上のレベルへと引き上げるためのものだ。VBScript (Visual Basic Scripting Edition)とWSH (Windows Script Host)の真髄に触れながら、不応答となったネットワークドライブを自動で検知し、安全に切断・再接続する「自動障害復旧ツール」を一緒に作り上げていこう。
この記事を読み終える頃には、君は単なるスクリプトの利用者に留まらず、VBScriptが持つオブジェクトの力、そしてその裏にある思想を理解し、自信を持って自動化の道を歩み始めることだろう。さあ、本質を掴む旅に出発しよう。
—
ネットワークドライブの「不応答」問題、その本質を理解する
まずは、なぜネットワークドライブが「切断されました」という状態になるのか、その背景を少しだけ覗いてみよう。
我々が普段使っているネットワークドライブは、実はローカルPCとリモートサーバー(ファイルサーバーなど)との間に「永続的な接続」が張られているわけではない。PCを起動した時や、ユーザーがログオンした時に、システムが特定の共有フォルダに対して「ドライブ文字(例: `Z:`)」を割り当てる(マッピングする)ことで機能している。
しかし、以下のような状況が発生すると、このマッピング情報と実際のネットワーク状態が乖離し、「切断されました」という表示が出ることがあるんだ。
- ネットワークの一時的な切断: Wi-Fiの不安定さ、LANケーブルの抜け、ルーターの再起動など。
- サーバー側の問題: ファイルサーバーの停止、再起動、共有設定の変更。
- PCのスリープからの復帰: スリープ中にネットワーク接続が失われ、復帰時にうまく再接続できない。
- 認証情報の失効: パスワードの変更や有効期限切れ。
システムは「Zドライブはあのサーバーのこの共有フォルダ」と覚えているんだけど、いざアクセスしようとするとネットワークがない、サーバーがない、認証できない、といった理由で「応答がない」状態になるわけだ。
エクスプローラーでは灰色のアイコンになり、右クリックで「切断」を選んでも反応がない、なんてこともよくあるよね。これは、システムがそのマッピング情報に固執してしまっているためで、手動での操作ではなかなか言うことを聞いてくれない場合があるんだ。
そこで登場するのが、VBScriptと`WScript.Network`オブジェクトの力だ。
—
VBScriptとWSH:自動化の司令塔
VBScriptは、Windows環境で動作する軽量なスクリプト言語だ。そして、そのVBScriptを実行するための環境が「WSH (Windows Script Host)」なんだ。WSHは、私たちが普段使っているWindows OSに標準で搭載されている、いわばスクリプトの「実行エンジン」のようなもの。
VBScriptとWSHを組み合わせることで、ファイルの操作、レジストリの変更、アプリケーションの起動、そして今回のようにネットワークリソースの管理まで、Windows上での様々な操作を自動化できる。
`WScript.Network`オブジェクトとは?
WSHが提供する強力なオブジェクトの一つに、`WScript.Network`がある。名前の通り、ネットワークリソースを扱うための様々な機能を提供してくれるんだ。
このオブジェクトを使うことで、以下のようなことが可能になる。
- 現在のユーザー名やコンピューター名を取得する
- プリンター接続を管理する
- そして、今回の主役である「ネットワークドライブ」の割り当てや切断を行う
この`WScript.Network`オブジェクトを使いこなすことが、今回の自動復旧ツールの鍵となる。
—
【実践】不応答ネットワークドライブの安全切断と再割り当て自動化
それでは、具体的なスクリプトを書いていこう。ステップごとに丁寧に解説していくから、安心してついてきてほしい。
スクリプトの全体像と目的
今回作成するスクリプトは、以下の処理を自動で行うことを目的としている。
1. 現在割り当てられているすべてのネットワークドライブを列挙する。
2. 各ドライブに対し、強制切断を試みる。(ここで不応答ドライブはエラーを伴って切断される)
3. 切断に成功した(または元々接続可能で切断された)ドライブに対して、設定されたパスで再接続を試みる。
この方法は、一度すべてのマッピングを「更地」にしてから、クリーンな状態で再構築するという、非常に堅実で確実なアプローチなんだ。
コードを動かす準備
まずは、メモ帳などのテキストエディタを開いて、以下のコードをコピー&ペーストしよう。ファイル名は例えば `RepairNetworkDrives.vbs` とし、デスクトップなどに保存してみてほしい。
‘—————————————————————————————————
‘ スクリプト名: RepairNetworkDrives.vbs
‘ 目的: 不応答となったネットワークドライブを検知し、強制切断後に安全に再割り当てする
‘ 著者: 伝説のチーフアーキテクト (あなた)
‘ 最終更新日: 2023-10-27
‘—————————————————————————————————
‘—————————————————————————————————
‘ ■ 設定セクション: ここを編集して、あなたの環境に合わせましょう
‘—————————————————————————————————
‘ 再接続したいネットワークドライブの設定
‘ 形式: Array(“ドライブ文字”, “リモートパス”, “ユーザー名”, “パスワード”)
‘ 例: Array(“Z:”, “\\YourServer\ShareFolder”, “domain\username”, “password”)
‘ ユーザー名とパスワードは省略可能。省略した場合、現在のユーザーの認証情報が使われます。
‘ セキュリティの観点から、パスワードをスクリプトに直接記述することは推奨されません。
‘ 実行ユーザーの認証情報で接続できる場合は、ユーザー名とパスワードの項目は省略してください。
‘ 例: Array(“Y:”, “\\AnotherServer\Data”)
Const NETWORK_DRIVES_TO_MAP = “Z:,\\YourServer\ShareFolder;Y:,\\AnotherServer\Data” ‘ セミコロン区切りで複数設定可能
‘ ログ出力の有効/無効 (True: 有効, False: 無効)
Const ENABLE_LOGGING = True
‘ ログファイルのパス (ENABLE_LOGGINGがTrueの場合にのみ使用)
Const LOG_FILE_PATH = “C:\Temp\NetworkDriveRepairLog.txt”
‘—————————————————————————————————
‘ ■ メイン処理部: ここから下がスクリプトの本体です
‘—————————————————————————————————
‘ WScript.Network オブジェクトを生成する
‘ このオブジェクトは、ネットワークドライブの割り当てや切断などの操作を可能にするための司令塔です。
‘ オブジェクトはメモリ上に実体を持つため、使い終わったら明示的に解放することが良い習慣です。
Dim objNetwork
Set objNetwork = CreateObject(“WScript.Network”)
‘ FileSystemObject オブジェクトを生成する
‘ ログファイルへの書き込みなどで使用します。
Dim objFSO
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
‘ ログファイルストリームの準備
Dim objLogFile
If ENABLE_LOGGING Then
‘ 親フォルダが存在しない場合は作成する (ログ出力のため)
If Not objFSO.FolderExists(objFSO.GetParentFolderName(LOG_FILE_PATH)) Then
objFSO.CreateFolder objFSO.GetParentFolderName(LOG_FILE_PATH)
End If
‘ ログファイルを追記モードで開く。ファイルが存在しない場合は新規作成される。
Set objLogFile = objFSO.OpenTextFile(LOG_FILE_PATH, 8, True) ‘ 8=ForAppending, True=CreateIfNotExist
Call LogMessage(“— スクリプト実行開始 (” & Now() & “) —“)
End If
Call LogMessage(“現在のネットワークドライブのマッピング情報を確認し、強制切断を試みます。”)
‘ 現在割り当てられているすべてのネットワークドライブを列挙し、強制切断する
‘ WScript.Network.EnumNetworkDrives メソッドは、ネットワークドライブのリストを返します。
‘ このリストは特殊な形式で、偶数インデックスにドライブ文字、奇数インデックスにリモートパスが格納されています。
Dim colNetDrives
Set colNetDrives = objNetwork.EnumNetworkDrives()
Dim i, strDriveLetter, strRemotePath
If colNetDrives.Count > 0 Then
For i = 0 To colNetDrives.Count – 1 Step 2
strDriveLetter = colNetDrives.Item(i) ‘ ドライブ文字 (例: “Z:”)
strRemotePath = colNetDrives.Item(i + 1) ‘ リモートパス (例: “\\Server\Share”)
Call LogMessage(” 検知されたドライブ: ” & strDriveLetter & ” -> ” & strRemotePath)
‘ エラーハンドリングを有効にする
‘ On Error Resume Next は、エラーが発生してもスクリプトの実行を中断せず、次の行に進むように指示します。
‘ これにより、エラーを検知し、その原因を特定するチャンスが得られます。
On Error Resume Next
‘ RemoveNetworkDrive メソッドでネットワークドライブを切断します。
‘ 第2引数 (UpdateProfile) を True にすると、ユーザープロファイルを更新します。
‘ 第3引数 (Force) を True にすると、ドライブが使用中の場合や不応答状態でも強制的に切断を試みます。
‘ これが不応答ドライブを「叩き切る」ための非常に重要なオプションです。
objNetwork.RemoveNetworkDrive strDriveLetter, True, True
‘ エラーが発生したかどうかを確認します。
If Err.Number <> 0 Then
‘ エラーが発生した場合、それはドライブが正常に切断できなかったことを意味します。
‘ これは多くの場合、不応答状態であったり、アクセス権の問題であったりします。
Call LogMessage(” [警告] ドライブ ” & strDriveLetter & ” の強制切断に失敗しました (エラーコード: ” & Err.Number & “, 説明: ” & Err.Description & “)”)
‘ ただし、多くの不応答ドライブはここでエラーを出しつつも、裏側で「切断」状態に移行します。
‘ このエラー自体が「不応答」の兆候であり、後続の再接続で対処します。
Else
‘ エラーがない場合、切断は成功しました。
Call LogMessage(” ドライブ ” & strDriveLetter & ” は正常に切断されました。”)
End If
‘ エラー情報をクリアします。次のエラーチェックに備えるために非常に重要です。
Err.Clear
Next
Else
Call LogMessage(“現在割り当てられているネットワークドライブは見つかりませんでした。”)
End If
Call LogMessage(“ネットワークドライブの再割り当てを開始します。”)
‘ 再接続したいドライブ情報を解析して処理する
Dim arrMapSettings, strMapSetting, arrDriveInfo
arrMapSettings = Split(NETWORK_DRIVES_TO_MAP, “;”)
If UBound(arrMapSettings) >= 0 And arrMapSettings(0) <> “” Then
For Each strMapSetting In arrMapSettings
arrDriveInfo = Split(strMapSetting, “,”)
If UBound(arrDriveInfo) >= 1 Then ‘ ドライブ文字とパスは必須
strDriveLetter = Trim(arrDriveInfo(0))
strRemotePath = Trim(arrDriveInfo(1))
Dim strUserName, strPassword
strUserName = “”
strPassword = “”
If UBound(arrDriveInfo) >= 2 Then strUserName = Trim(arrDriveInfo(2))
If UBound(arrDriveInfo) >= 3 Then strPassword = Trim(arrDriveInfo(3))
Call LogMessage(” ドライブ ” & strDriveLetter & ” を ” & strRemotePath & ” に再割り当てを試みます。”)
On Error Resume Next
‘ MapNetworkDrive メソッドでネットワークドライブを割り当てます。
‘ 第1引数: ドライブ文字 (例: “Z:”)
‘ 第2引数: リモートパス (例: “\\Server\Share”)
‘ 第3引数 (Persist): True にすると、ログオフ後も割り当てを保持します。
‘ 第4引数 (UserName): 接続ユーザー名 (オプション)
‘ 第5引数 (Password): 接続パスワード (オプション)
If strUserName <> “” And strPassword <> “” Then
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, True, strUserName, strPassword
Else
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, True
End If
If Err.Number <> 0 Then
Call LogMessage(” [エラー] ドライブ ” & strDriveLetter & ” の再割り当てに失敗しました (エラーコード: ” & Err.Number & “, 説明: ” & Err.Description & “)”)
Else
Call LogMessage(” ドライブ ” & strDriveLetter & ” は正常に再割り当てされました。”)
End If
Err.Clear
Else
Call LogMessage(” [警告] 不正なネットワークドライブ設定が見つかりました: ” & strMapSetting)
End If
Next
Else
Call LogMessage(“再割り当て対象のネットワークドライブが設定されていません。”)
End If
Call LogMessage(“— スクリプト実行終了 —“)
‘ オブジェクトの解放
‘ スクリプトが確保したメモリやリソースを適切に解放することは、良いプログラミング習慣です。
‘ 特にWSHスクリプトは常駐したり、タスクスケジューラで頻繁に実行される可能性があるため、重要です。
Set objNetwork = Nothing
If ENABLE_LOGGING And Not objLogFile Is Nothing Then
objLogFile.Close
Set objLogFile = Nothing
End If
Set objFSO = Nothing
‘—————————————————————————————————
‘ ■ サブルーチン: ログメッセージ出力
‘—————————————————————————————————
Sub LogMessage(message)
If ENABLE_LOGGING Then
If Not objLogFile Is Nothing Then
objLogFile.WriteLine Now() & ” – ” & message
End If
End If
‘ WScript.Echo は、スクリプト実行中にメッセージボックスやコンソールに出力します。
‘ タスクスケジューラなどで非表示実行する場合は、ログファイルへの出力が重要です。
WScript.Echo message
End Sub
コードの解説:一歩ずつ理解を深めよう
1. 設定セクションのカスタマイズ
まず、スクリプトの冒頭にある「設定セクション」を君の環境に合わせて編集しよう。
Const NETWORK_DRIVES_TO_MAP = “Z:,\\YourServer\ShareFolder;Y:,\\AnotherServer\Data”
‘ … 略 …
Const LOG_FILE_PATH = “C:\Temp\NetworkDriveRepairLog.txt”
- `NETWORK_DRIVES_TO_MAP`: ここに、再接続したいネットワークドライブの情報を記述する。複数のドライブがある場合は、セミコロン (`;`) で区切って記述できる。各ドライブの情報は「ドライブ文字,リモートパス,ユーザー名,パスワード」の形式だ。
- 重要ポイント: `ユーザー名`と`パスワード`は省略可能だが、もし必要なら記述しよう。ただし、スクリプトに直接パスワードを記述することはセキュリティ上、推奨されない。実行ユーザーの認証情報で接続できる場合は、ユーザー名とパスワードの項目は省略するのがベストプラクティスだ。
- `ENABLE_LOGGING`: `True`に設定すると、スクリプトの実行ログを指定したファイルに出力する。タスクスケジューラで自動実行する場合などに、何が起こったかを確認できて非常に便利だ。
- `LOG_FILE_PATH`: ログファイルのパス。適宜変更してほしい。`C:\Temp` など一時的な場所が良いだろう。
2. オブジェクトの生成とライフサイクル
Dim objNetwork
Set objNetwork = CreateObject(“WScript.Network”)
Dim objFSO
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
ここがVBScriptのオブジェクト指向プログラミングの基本中の基本だ。
- `Dim objNetwork`: `objNetwork`という名前の変数を宣言している。
- `Set objNetwork = CreateObject(“WScript.Network”)`: ここがポイントだ。`CreateObject`関数を使って、`WScript.Network`という名前のオブジェクトを「生成」し、その実体への参照を`objNetwork`変数に「セット」している。
- 「オブジェクト」とは、特定の機能を持った「モノ」だと思ってくれればいい。例えば、`WScript.Network`は「ネットワーク操作」という機能を持つモノ、`Scripting.FileSystemObject`は「ファイルシステム操作」という機能を持つモノだ。
- `Set`キーワードは、VBScriptでオブジェクトを操作する際に必須だ。単なる数値や文字列の代入とは異なり、オブジェクトの「参照」を渡すという意味合いがある。
- 【極限の知見】オブジェクトのライフサイクル: オブジェクトを`CreateObject`で生成すると、PCのメモリ上にその実体が作られる。スクリプトが終了すれば通常は自動的に解放されるが、特に長時間稼働するスクリプトや、タスクスケジューラで頻繁に実行されるスクリプトでは、使い終わったオブジェクトを明示的に解放する習慣をつけよう。それが`Set objNetwork = Nothing`のような記述だ。これにより、メモリリークを防ぎ、システムリソースを効率的に利用できる。
3. 既存ネットワークドライブの列挙と強制切断
Set colNetDrives = objNetwork.EnumNetworkDrives()
‘ … 略 …
objNetwork.RemoveNetworkDrive strDriveLetter, True, True
If Err.Number <> 0 Then
‘ … エラー処理 …
End If
Err.Clear
ここがこのスクリプトの肝となる部分の一つだ。
- `objNetwork.EnumNetworkDrives()`: 現在PCに割り当てられているすべてのネットワークドライブの情報を取得する。このメソッドは、ドライブ文字とリモートパスが交互に格納された特殊なコレクションを返す。
- `For i = 0 To colNetDrives.Count – 1 Step 2`: `EnumNetworkDrives`が返すコレクションは、`Item(0)`にドライブ文字、`Item(1)`にリモートパス、`Item(2)`に次のドライブ文字…という具合に格納されているため、`Step 2`でループを回す必要がある。
- `On Error Resume Next`: これはVBScriptにおける唯一の、そして最も重要なエラーハンドリングの仕組みだ。「エラーが発生してもスクリプトを中断せず、次の行の処理を続行しなさい」という意味だ。
- なぜこれが必要かというと、`RemoveNetworkDrive`メソッドは、不応答なドライブを切断しようとするとエラーを発生させるからだ。しかし、このエラーこそが「このドライブは不応答だ」というサインであり、我々はこのエラーを逆手に取る。
- `objNetwork.RemoveNetworkDrive strDriveLetter, True, True`: ドライブを切断するメソッドだ。
- `strDriveLetter`: 切断したいドライブ文字(例: `Z:`)。
- `True` (2番目の引数): ユーザープロファイルにこの変更を反映させるかどうか。通常は`True`にする。
- `True` (3番目の引数、`Force`): これが今回の最大のポイント! ドライブが使用中だったり、不応答状態だったりしても、強制的に切断を試みる。この`Force`オプションがなければ、エクスプローラーで右クリックしても切断できないようなドライブは、スクリプトでも切断できないことが多い。このオプションを使うことで、システムが持っているマッピング情報を「強制的に削除」するんだ。
- `If Err.Number <> 0 Then`: `On Error Resume Next`を設定しているため、`RemoveNetworkDrive`でエラーが発生してもスクリプトは止まらない。そこで、`Err.Number`という組み込みオブジェクトのプロパティをチェックして、エラーが発生したかどうかを確認する。`0`でなければエラーが発生したことを意味する。
- このエラー発生自体を「不応答ドライブだった」と解釈し、ログに警告を出力する。これにより、一度すべてのマッピングを確実にリセットする。
- `Err.Clear`: エラー情報をクリアする。次の処理で発生する可能性のあるエラーを正しく検知するために、各処理の後に必ずクリアする習慣をつけよう。これを忘れると、前のエラー情報が残り、意図しない挙動につながる可能性がある。
4. ドライブの再割り当て
objNetwork.MapNetworkDrive strDriveLetter, strRemotePath, True, strUserName, strPassword
強制切断で一度きれいになったところで、今度は設定セクションで定義したドライブを再接続する。
- `objNetwork.MapNetworkDrive`: ネットワークドライブを割り当てるメソッドだ。
- `strDriveLetter`: 割り当てたいドライブ文字(例: `Z:`)。
- `strRemotePath`: 接続先のリモートパス(例: `\\YourServer\ShareFolder`)。
- `True` (3番目の引数、`Persist`): この割り当てを永続化するかどうか。`True`にすると、PCを再起動したり、ログオフ・ログオンし直したりしても、このマッピングが保持される。
- `strUserName`, `strPassword`: 接続に必要なユーザー名とパスワード。省略した場合は、スクリプトを実行しているユーザーの認証情報で接続が試みられる。
ここでも`On Error Resume Next`と`Err.Number`のチェックを行うことで、もし再接続に失敗した場合でも、その原因をログで確認できるようにしている。
5. オブジェクトの解放とログ機能
Set objNetwork = Nothing
If ENABLE_LOGGING And Not objLogFile Is Nothing Then
objLogFile.Close
Set objLogFile = Nothing
End If
Set objFSO = Nothing
スクリプトの最後で、使用したオブジェクトを`Nothing`にセットして解放している。これは前述したオブジェクトのライフサイクル管理において非常に重要な作法だ。
また、`LogMessage`サブルーチンを別途定義することで、ログ出力処理を共通化し、スクリプト全体の可読性を高めている。`WScript.Echo`はデバッグ時や手動実行時に便利だが、タスクスケジューラなどで非表示実行する場合は、ログファイルへの出力が不可欠となる。
—
スクリプトの実行方法と活用法
1. 手動実行
作成した `RepairNetworkDrives.vbs` ファイルをダブルクリックするだけで実行できる。VBScriptはWSHによって自動的に実行される。
または、コマンドプロンプトから `cscript.exe RepairNetworkDrives.vbs` と入力して実行することもできる。`cscript.exe`を使うと、`WScript.Echo`の出力がコンソールに表示されるため、デバッグがしやすい。
2. タスクスケジューラで自動実行
このスクリプトの真価は、タスクスケジューラと組み合わせることで発揮される。
1. タスクスケジューラの起動: Windowsの検索バーに「タスクスケジューラ」と入力して起動する。
2. 新しいタスクの作成: 「操作」メニューから「タスクの作成」を選択。
3. 全般タブ:
- 名前: `ネットワークドライブ復旧` など、分かりやすい名前を付ける。
- セキュリティオプション: 「ユーザーがログオンしているかどうかにかかわらず実行する」を選択し、「パスワードを保存しない」のチェックを外す。実行するユーザーアカウントを指定し、パスワードを入力する。これにより、ログオフ状態でもスクリプトが実行され、常にドライブが健全な状態に保たれる。
- 「最上位の特権で実行する」にチェックを入れると、より高い権限で実行できるため、ネットワーク操作が安定しやすい。
4. トリガータブ:
- 「新規」をクリック。「タスクの開始」で「ログオン時」や「毎日」などを選択。例えば「ログオン時」に設定すれば、PCにログオンするたびにドライブの状態がチェックされ、修復される。あるいは「毎日」の特定の時間帯に実行することで、定期的なメンテナンスを自動化できる。
- 「繰り返し間隔」を設定することも可能だ。例えば「1時間ごと」に実行すれば、より迅速な復旧が期待できる。
5. 操作タブ:
- 「新規」をクリック。
- 操作: 「プログラムの開始」
- プログラム/スクリプト: `cscript.exe` (VBScriptをコンソールで実行するためのWSHホスト)
- 引数の追加: `//Nologo //B “C:\Path\To\Your\RepairNetworkDrives.vbs”`
- `//Nologo`: CScriptの著作権表示を非表示にする。
- `//B`: バッチモードで実行し、`WScript.Echo`によるメッセージボックスの表示を抑制する。これにより、ユーザーインタラクションなしでバックグラウンド実行が可能になる。
- `”C:\Path\To\Your\RepairNetworkDrives.vbs”`: 作成したVBScriptファイルのフルパスを指定する。
6. 条件タブ/設定タブ: 必要に応じて、電源設定やタスクの停止条件などを調整する。
これで、君のPCはネットワークドライブの不調から自動的に回復する、強靭なシステムへと生まれ変わるだろう。
3. さらなる応用とセキュリティの考慮
- 複数のドライブ設定の動的な管理: 今回は`NETWORK_DRIVES_TO_MAP`という定数に直接記述したが、これを外部のテキストファイルやCSVファイルから読み込むようにすれば、スクリプト本体を編集せずにドライブ設定を変更できるようになる。
- より詳細なエラーハンドリング: `Err.Number`で取得できるエラーコードは多種多様だ。例えば、特定のエラーコード(認証失敗、ネットワークパスが見つからないなど)に対して、異なるメッセージを表示したり、追加の処理を実行したりと、より洗練されたエラーハンドリングを実装できる。
- セキュリティに関する注意: パスワードをスクリプトに直接記述することは、情報漏洩のリスクを伴う。可能であれば、実行ユーザーの認証情報で接続するか、必要に応じてユーザーにパスワード入力プロンプトを表示させるなどの方法を検討しよう。WSHには`InputBox`関数や、よりセキュアな認証情報管理方法(Credential Managerとの連携など)もあるが、今回は初学者向けということで割愛する。しかし、この点は常に意識しておくべき重要な要素だ。
—
まとめ:VBScriptの基本はバッチリ、そしてその先へ
お疲れ様だったね。これで君は、VBScriptとWSHを使って、不応答なネットワークドライブを自動的に復旧させるツールを手に入れたわけだ。
今回のスクリプトで、君は以下の重要な概念を学んだはずだ。
- VBScriptとWSHの役割: Windows環境での自動化の基盤。
- `WScript.Network`オブジェクトの力: ネットワークドライブを操作するための強力なツール。
- オブジェクトのライフサイクル: `CreateObject`と`Set Nothing`の重要性。
- エラーハンドリングの本質: `On Error Resume Next`と`Err`オブジェクトを組み合わせて、エラーを「状態判断」に使うテクニック。
- `RemoveNetworkDrive`の`Force`オプション: 不応答ドライブを強制的にシステムから「忘却」させる決定打。
これらの知識は、単にネットワークドライブの復旧に留まらず、VBScriptを使ったあらゆる自動化の基礎となる、極めて本質的なものだ。
「ここをクリアすれば、VBScript (Visual Basic Scripting Edition)の基本はバッチリですよ。」
さあ、この一歩を足がかりに、君の業務を、そして君自身のスキルを、次のレベルへと引き上げていこう。自動化の可能性は無限大だ。君ならきっと、この先も素晴らしいスクリプトを生み出せるはずだ。応援しているよ。
