VBScriptでネットワーク環境を掌握せよ:WMIによるMAC・IP対応表の自動生成術
こんにちは。自動化の現場で血の滲むようなデバッグを重ねてきた、あなたの技術的な伴走者です。
「マクロの記録」ボタンを押すだけの生活から一歩踏み出し、OSの深淵であるWMI (Windows Management Instrumentation) を叩いて情報を吸い上げる……。これこそが、Windows自動化エンジニアとしての第一歩です。
今回は、PCに刺さっている無数のインターフェース(物理NIC、仮想NIC、Wi-Fi)から、今まさに「生きて通信している」情報だけを抜き出す、インベントリ収集の極意を伝授します。
—
なぜ「WMI」なのか?
VBScriptの真価は、OSの心臓部であるWMIに直接アクセスできる点にあります。`Win32_NetworkAdapterSetting` は、「ネットワークアダプタ」と「IPアドレス情報」を紐付けるための架け橋となる重要なクラスです。
しかし、ただデータを拾うだけではノイズ(無効なアダプタや、仮想ブリッジ等)が大量に含まれます。ここで「本物のエンジニア」としての選別眼が問われるのです。
—
実践:ネットワークインベントリ抽出スクリプト
以下のコードは、単に情報を出すだけではありません。`NetConnectionStatus = 2`(接続済み)という条件でフィルタリングし、ゴミデータを徹底的に排除する設計にしています。
‘ — ネットワークインベントリ収集スクリプト —
‘ オブジェクトの生成:WMIのサービスへ接続
Set objWMIService = GetObject(“winmgmts:\\.\root\cimv2”)
‘ 1. 有効なネットワークアダプタのみを抽出
Set colAdapters = objWMIService.ExecQuery _
(“SELECT FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2”)
WScript.Echo “MACアドレス” & vbTab & “IPアドレス”
WScript.Echo “——————————————”
For Each objAdapter in colAdapters
‘ 2. アダプタに対応するIP構成情報を取得
Set colConfigs = objWMIService.ExecQuery _
(“ASSOCIATORS OF {Win32_NetworkAdapter.DeviceID='” & objAdapter.DeviceID & “‘} ” & _
“WHERE AssocClass = Win32_NetworkAdapterSetting”)
For Each objConfig in colConfigs
‘ 3. IPアドレスが存在する場合のみ出力
If Not IsNull(objConfig.IPAddress) Then
For Each strIP in objConfig.IPAddress
‘ MACアドレスとIPアドレスを表示
WScript.Echo objAdapter.MACAddress & vbTab & strIP
Next
End If
Next
Next
—
コードのここが「極意」です
このコードをただコピペするだけでなく、以下の3点だけは心に刻んでください。
1. `ASSOCIATORS OF` クエリの重要性
- WMIには「ネットワークカード(Win32_NetworkAdapter)」と「IP設定(Win32_NetworkAdapterConfiguration)」という別の箱があります。この2つを結びつけるのが `ASSOCIATORS OF` です。リレーショナルデータベースのような考え方ですね。
2. `NetConnectionStatus = 2` の魔法
- ここが初心者が一番陥りやすい罠です。PCにはBluetoothや仮想ドライバなど、見えないアダプタが山ほどあります。「有効(Connected)」なものだけに絞ることで、スクリプトの信頼性は劇的に向上します。
3. 多重ループの覚悟
- `IPAddress` は配列形式で返ってきます。IPv4とIPv6が共存する場合もあるため、常に「配列である」ことを前提にループを回すのが、堅牢なスクリプトを書く秘訣です。
—
陥りやすいエラーとその対策
- 「許可がありません」エラー:
WMIへのアクセスには管理者権限が必要です。スクリプトを実行する際は、コマンドプロンプトを「管理者として実行」してください。
- 値が取得できない:
VPNソフトなどがインストールされていると、アダプタのステータスが「2(接続)」になっていない場合があります。そんな時は `objAdapter.NetEnabled = True` を条件に加えるなど、環境に合わせて条件を微調整するのが「現場の知恵」です。
—
さあ、自動化の旅へ
VBScriptは「古い」と言われることもあります。しかし、OSに深く根ざしたこの言語を理解することは、PowerShellや他のモダンな言語を操る際にも必ず役立つ「基礎体力」になります。
まずはこのスクリプトを `inventory.vbs` という名前で保存し、ダブルクリックしてみてください。あなたのPCが今、世界とどう繋がっているのか。その詳細なリストが目の前に現れるはずです。
ここをクリアしたあなたは、もう「マクロの記録」に頼る初心者ではありません。次は、このデータをCSVやExcelに出力するステップへ進みましょう。応援していますよ!
