VBScriptでWindowsを支配せよ:プリンタードライバー一括調査の極意
こんにちは。システム自動化の最前線で戦う皆さん。
「マクロの記録」ボタンを押すだけの世界から一歩踏み出し、OSそのものを自在に操りたいと考えたことはありませんか?
今回は、社内PCの保守・リプレイス業務で必ず直面する「プリンタードライバーの管理」をテーマに、VBScriptを使って端末内の情報を一撃でCSVに叩き出す手法を伝授します。
VBScriptは、今や「レガシー」などと揶揄されることもありますが、Windows環境において「OSの内部構造を直接叩ける極めて軽量な言語」である事実に変わりはありません。このツールを使いこなせるエンジニアこそが、現場のトラブルを最短で鎮火できるのです。
—
1. なぜ「WMI」なのか?
Windowsには、OSの設定やハードウェア情報を管理するための「WMI (Windows Management Instrumentation)」という強力なデータベースが備わっています。
VBScriptからWMIを叩くということは、「Windowsの脳内に直接質問を投げかける」ようなもの。
今回使用する `Win32_PrinterDriver` クラスは、インストールされているドライバーのOS環境やバージョン、ドライバーファイル名といった「管理者が喉から手が出るほど欲しい情報」を保持しています。
—
2. 実践コード:ドライバー調査スクリプト
このスクリプトは、実行するとデスクトップに `PrinterDriverList.csv` を生成します。メモ帳に貼り付け、`.vbs` 拡張子で保存して実行してみてください。
‘ — 設定エリア —
Const ForWriting = 2
Dim objFSO, objFile, strPath
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
strPath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\PrinterDriverList.csv”
‘ CSVファイルの作成とヘッダー書き込み
Set objFile = objFSO.OpenTextFile(strPath, ForWriting, True)
objFile.WriteLine “ドライバー名,バージョン,環境,ドライバーパス”
‘ — WMI接続の極意 —
‘ 接続先はローカルホスト(.)。ここをIPアドレスに変えれば遠隔管理も可能
Dim objWMIService, colItems, objItem
Set objWMIService = GetObject(“winmgmts:\\.\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select from Win32_PrinterDriver”)
‘ — データの抽出 —
For Each objItem in colItems
‘ エラー回避のため、値が空でないか確認しながら取得するのがプロの作法
Dim line
line = objItem.Name & “,” & _
objItem.Version & “,” & _
objItem.Environment & “,” & _
objItem.DriverPath
objFile.WriteLine line
Next
‘ — 後始末 —
objFile.Close
MsgBox “調査完了!デスクトップのCSVを確認してください。”, 64, “完了”
—
3. コードの読み解きと「現場の知恵」
① WMI接続の `GetObject`
`GetObject(“winmgmts:\\.\root\cimv2”)`。これはWMIという図書館への入場チケットです。
ここで重要なのは「管理者権限」。もし実行して「許可がありません」と怒られたら、コマンドプロンプトを「管理者として実行」してからスクリプトを叩いてください。現場のトラブルの8割は権限不足です。
② `For Each` ループの意義
`objWMIService.ExecQuery` で取得したデータは「コレクション」と呼ばれます。
初心者の方は「なぜ配列じゃないの?」と思うかもしれませんが、これは「必要な時に必要な分だけメモリから取り出す」というOS側の配慮です。大量のドライバーが入っていても、PCが重くならないのはこの仕組みのおかげです。
③ CSV出力の注意点
今回はシンプルにカンマ区切りにしていますが、もしドライバー名にカンマが含まれているとCSVが崩れます。本格的な運用なら、`Chr(34)` を使ってダブルクォーテーションで囲む処理を挟むのが、プロのエンジニアの嗜みです。
—
4. 陥りやすいエラーと回避策
- 「実行しても何も起きない」
- 原因の多くは、WMIのクエリが間違っているか、権限がないこと。`On Error Resume Next` を無闇に使わず、最初はエラーを表示させて原因を特定しましょう。
- 「日本語が文字化けする」
- VBScriptの標準出力はANSIであることが多いです。ExcelでCSVを開く際、文字化けするようなら、一度メモ帳で開いて「名前をつけて保存(エンコード:UTF-8 BOM付き)」を選択してみてください。
—
最後に:自動化の先にあるもの
このコードが書ければ、あなたはもう「手作業でプロパティを確認する」という非生産的な作業から解放されます。
さらに応用すれば、このスクリプトをネットワーク越しに全台実行させたり、バージョンが古いドライバーを抽出してアラートを出すことも可能です。
VBScriptは古い言語ですが、そのシンプルさは「OSの挙動を理解する最短ルート」です。この小さなコードから、ぜひ皆さんの業務改革をスタートさせてください。
何かわからないことがあれば、またいつでも聞きに来てください。健闘を祈ります。
