【実務・中級編】【ネットワーク自動化】WScript.Network を用いたネットワークドライブ割り当てとプリンター共有の全自動化 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

【ネットワーク自動化の極意】WScript.Networkを制し、エンタープライズ環境を掌握せよ

業務自動化の世界において、VBScriptは「レガシー」と揶揄されることがある。だが、Windowsの心臓部(WSH)に直接アクセスし、インストーラー不要で即座に展開できるこの言語の優位性は、現代においても揺るぎない。

特に、ドメイン環境におけるネットワークドライブの割り当てやプリンターの制御は、GUI操作で行うにはあまりにも脆弱で非効率だ。今回は、現場のエンジニアが陥りやすい罠を回避し、「止まらない、汚さない、追跡できる」自動化スクリプトの書き方を伝授する。

—

1. なぜ「雑なスクリプト」は現場を壊すのか

多くの初心者が書くコードには、致命的な欠陥がある。それは「エラーハンドリングの欠如」と「リソースのゾンビ化」だ。

  • ドライブの重複: すでに接続されているドライブに対し、無造作に`MapNetworkDrive`を叩けば、スクリプトはエラーで停止する。
  • 権限の不整合: ネットワークパスは、実行ユーザーのコンテキストに依存する。ログオン時にスクリプトを走らせる際、ネットワークスタックの準備が整う前に処理を開始すると、接続に失敗する。

これらを解決するための「堅牢な設計」をコードに落とし込む必要がある。

—

2. 実務で通用する「ネットワーク制御」プロダクションコード

以下は、実務環境でそのまま利用できるテンプレートだ。エラーを握り潰すのではなく、適切に判定し、既存の接続をクリーンアップしてから再構築する設計としている。

‘ — ネットワーク自動化エンジン:NetOps_Manager.vbs —
Option Explicit

Dim objNetwork
Set objNetwork = WScript.CreateObject(“WScript.Network”)

‘ 構成定義
Const DRIVE_LETTER = “Z:”
Const NETWORK_PATH = “\\Server\SharedFolder”
Const PRINTER_PATH = “\\PrintServer\Office_Printer”

‘ 1. ネットワークドライブの安全な接続
Call MapDrive(DRIVE_LETTER, NETWORK_PATH)

‘ 2. プリンターのデフォルト設定
Call SetDefaultPrinter(PRINTER_PATH)

‘ オブジェクトの解放(プロセスの生存期間を意識する)
Set objNetwork = Nothing

‘ — 関数セクション —

Sub MapDrive(strDrive, strPath)
Dim objDrives, i
Set objDrives = objNetwork.EnumNetworkDrives()

‘ 既存接続を確認し、重複があれば切断する
For i = 0 To objDrives.Count – 1 Step 2
If UCase(objDrives.Item(i)) = UCase(strDrive) Then
objNetwork.RemoveNetworkDrive strDrive, True, True
Exit For
End If
Next

‘ 接続の試行(エラーハンドリングを有効化)
On Error Resume Next
objNetwork.MapNetworkDrive strDrive, strPath
If Err.Number <> 0 Then
WScript.Echo “ドライブ接続エラー: ” & strPath & ” [” & Err.Description & “]”
End If
On Error GoTo 0
End Sub

Sub SetDefaultPrinter(strPath)
On Error Resume Next
objNetwork.AddWindowsPrinterConnection strPath
objNetwork.SetDefaultPrinter strPath
If Err.Number <> 0 Then
WScript.Echo “プリンター設定エラー: ” & strPath & ” [” & Err.Description & “]”
End If
On Error GoTo 0
End Sub

—

3. アーキテクトの視点:成功のための3つの鉄則

このコードを実装する上で、以下の3点を意識してほしい。これが「動くコード」を「保守可能な資産」に変える境界線だ。

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

VBScriptにおいてエラー制御は必須だが、「どこでエラーが起きる可能性があるか」をピンポイントで囲い込むこと。 スクリプト全体を囲むのは怠慢である。必ず `On Error GoTo 0` で直後に無効化し、エラーの影響範囲を最小限に抑えるのがプロの流儀だ。

② ネットワークスタックの待ち時間

ログオン時に実行する場合、OSのネットワーク初期化が完了する前にスクリプトが走ることがある。これを回避するには、ループ処理でネットワークリソースが応答するまで数秒待機するロジック(`WScript.Sleep`)を冒頭に入れるのが、泥臭いが最も確実な解となる。

③ ログ出力の重要性

本番環境では `WScript.Echo` は使えない(対話型ではないため)。ファイルシステムオブジェクト(FSO)を用い、実行ログをサーバー上の共有フォルダに追記する仕組みを実装しておくべきだ。
> 「何時に、どのPCが、どのパスに接続しようとして、どのエラーで失敗したのか」
このログさえあれば、ヘルプデスクへの問い合わせを劇的に減らせる。

—

最後に:自動化の先にあるもの

VBScriptは古い。しかし、そのシンプルさは「誰でも読める」という最強の保守性をもたらす。このスクリプトをグループポリシー(GPO)のログオンスクリプトに登録するだけで、全社員の環境は数秒で統一される。

技術は手段に過ぎない。重要なのは、「現場の面倒な反復作業を、いかにエレガントに消滅させるか」だ。コードを書き終えたら、次はぜひその「自動化された環境」をどう維持するか、その先を設計してみてほしい。

君たちの自動化が、誰かの業務時間を救うことを期待している。

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