こんにちは。自動化の世界へようこそ。
現場で泥臭く、しかし誰よりもスマートにシステムを操りたいと願うあなたへ。今日は、VBScriptの真骨頂とも言える「WMIによるネットワーク制御」という、少しだけ背伸びした、けれど最高にエキサイティングな領域へ案内します。
マクロの記録ボタンを押すだけの「作業者」から、OSの深淵を制御する「エンジニア」へ。その第一歩をここで踏み出しましょう。
—
なぜVBScriptでネットワークを制御するのか?
現代のWindows環境において、有線LAN(Ethernet)と無線LAN(Wi-Fi)が混在するマルチホーム環境は当たり前です。しかし、PCは時として「遅い回線」を掴んだまま離さないことがあります。
これを力技で制御するのが、Windows管理の要である WMI (Windows Management Instrumentation) です。VBScriptは、このWMIを最も軽量かつ直接的に叩ける言語の一つ。インストール不要、コンパイル不要、メモ帳一つでOSを支配下に置ける――この「軽さ」こそが、自動化エンジニアの武器なのです。
—
ネットワークの優先順位を操る「メトリック」の正体
ルーティングテーブルには「メトリック」という値があります。これは「その経路を使うためのコスト(重み)」です。数値が小さいほど優先度が高くなります。
今回は、特定のインターフェースのメトリック値をVBScriptで書き換え、通信経路を強制的に切り替えるロジックを組んでいきます。
実践コード:ルートメトリックの動的変更
以下のコードは、指定したネットワークインターフェースのルートメトリックを書き換えるためのテンプレートです。
‘ — WMI経由でルートメトリックを変更するスクリプト —
Option Explicit
‘ 変更対象のインターフェースインデックスと、設定したいメトリック値
Dim targetIndex, newMetric
targetIndex = 12 ‘ ここは環境に合わせてコマンド(route print)で確認してください
newMetric = 10 ‘ 小さいほど優先されます
Set objWMIService = GetObject(“winmgmts:\\.\root\cimv2”)
‘ Win32_IP4RouteTable から指定したインデックスのルートを抽出
Set colRoutes = objWMIService.ExecQuery _
(“Select From Win32_IP4RouteTable Where InterfaceIndex = ” & targetIndex)
For Each objRoute In colRoutes
‘ メトリック値を更新
objRoute.Metric1 = newMetric
‘ 変更をシステムに反映(Putメソッド)
errResult = objRoute.Put_
If errResult = 0 Then
WScript.Echo “成功: インターフェース ” & targetIndex & ” のメトリックを ” & newMetric & ” に変更しました。”
Else
WScript.Echo “エラー: 変更に失敗しました。権限を確認してください。”
End If
Next
—
初学者がハマる「3つの落とし穴」
VBScriptを触っていると、必ずと言っていいほど以下の壁にぶつかります。これを覚えておくだけで、周囲のエンジニアより一歩リードできます。
1. 権限(昇格)の壁
WMIでOSのネットワーク設定を書き換える行為は、管理者権限が必須です。スクリプトをダブルクリックするだけでは「アクセス拒否」になります。
- 解決策: コマンドプロンプトを「管理者として実行」してから `cscript.exe script.vbs` と入力して実行する癖をつけましょう。
2. インデックスの固定概念
`InterfaceIndex` は再起動やネットワークアダプタの脱着で変わることがあります。
- 知見: `Win32_NetworkAdapter` と `Win32_IP4RouteTable` を突き合わせて、名前(例:”Wi-Fi”)から現在のIndexを動的に取得するロジックを組むのが、プロの自動化です。
3. WMIの「Put_」メソッドの重み
WMIオブジェクトの変更は、単なる変数への代入ではありません。`.Put_` を呼び出した瞬間、OS内部のレジストリやカーネルレベルのルーティングテーブルに書き込みが行われます。
- 注意: ループ処理の中で闇雲に `Put_` を呼ぶと、OSが悲鳴を上げます。変更が必要な時だけ書き換える、という「変化検知」のロジックが重要です。
—
先輩からのアドバイス:ここをクリアすれば「一人前」
VBScriptは古い言語だと言われますが、「OSの仕様(WMI)を理解して制御する」という本質は、PowerShellであれPythonであれ全く同じです。
まずはこのコードを書き写し、自分の環境の `targetIndex` を特定し、メトリックが変わる瞬間を目撃してください。その時、画面の向こう側のOSが、あなたの書いたコードに従って通信経路を変えた――その感覚こそが、業務自動化エンジニアとしての最初の快感です。
次は、これを「Wi-Fiが切れたら有線に切り替える」という監視ループの中に組み込んでみましょう。そうすれば、あなたはもう立派な自動化の設計者です。
迷ったら、またいつでもここへ戻ってきてください。準備はいいですか? さあ、コードを書き始めましょう。
