Windowsのネットワーク切り替えバッチを作ってみた


複数のマシンを管理していると、クライアントのIPアドレスやDNSサーバのアドレスをDHCPで配布すると思うが、必ずしもすべての事業所で対応できていないケースがある。
設置場所固定が前提のデスクトップPCであれば支障ないが、ノートPCを複数の拠点で使いまわす場合、接続するLANが変わるたびに設定(下図画面)を変えるのは些か煩雑であった。

そこで、IPv4のネットワーク設定を切り替えるバッチを作成した。

switch_network.bat
@echo off
echo 1:東京本社
echo 2:名古屋ビジネスセンター
echo 3:大阪事業所
echo.
choice /C:123 /M:どのネットワークに接続しますか
echo.

set NAME=イーサネット

if %ERRORLEVEL% equ 1 (
  netsh interface ipv4 set address "%NAME%" dhcp
  netsh interface ipv4 set dns "%NAME%" dhcp
  echo 東京本社に切り替えました!
) else if %ERRORLEVEL% equ 2 (
  netsh interface ipv4 set address "%NAME%" static <IPアドレス> <サブネットマスク> <デフォルトGW>
  netsh interface ipv4 set dns "%NAME%" static <優先DNS> primary
  netsh interface ipv4 add dns "%NAME%" <代替DNS>
  echo 名古屋ビジネスセンターに切り替えました!
) else if %ERRORLEVEL% equ 3 (
  netsh interface ipv4 set address "%NAME%" static <IPアドレス> <サブネットマスク> <デフォルトGW>
  netsh interface ipv4 set dns "%NAME%" static <優先DNS> primary
  netsh interface ipv4 add dns "%NAME%" <代替DNS>
  echo 大阪事業所に切り替えました!
)

ipconfig /all
pause

この例では「東京本社のみDHCP」「他拠点は固定IP」としている。

管理者権限を必要とするので、一般ユーザで運用するならrunasで昇格するラッパーバッチも用意しよう。

wrapper.bat
cd %~d0%~p0
runas.exe /noprofile /savecred /user:<ドメイン名>\<管理者アカウント名> "switch_network.bat"
pause

初回だけ管理者にパスワードを入力してもらえば良い。パスワードは資格情報に保存されるので2回目以降は聞いてこない。
ただし、runasの仕掛けはセキュリティホールになり得るので、バッチファイルのパーミッションを適切に設定し、書き替えられないような「ひと手間」は加えるべきだろう。