【入門編】【ネットワークインターフェース詳細分析】WMI Win32_NetworkAdapterSetting を解析したMACアドレス・IP対応表の自動生成 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

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に出力するステップへ進みましょう。応援していますよ!

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