背景
ちょっと特殊なんですが、
社内で持ち運び使用するノートPC(Windows)があって、有線や無線などを建物や部屋ごとに切り替える必要があり、さらに建物や教室ごとに異なるプロキシがある。
みたいな状況で働いてます。しかも一部は固定IPを使用する必要があったりします。
なるべく楽したくて作ったバッチファイルを、バッチファイルの書き方の備忘録もかねてここに残しておきます。
とりあえず完成版だけ見たいって人は最後の見出しまでスキップしてください。
netsh
コマンドプロンプトからIPアドレスなどの設定を行うには netsh
コマンドを利用します。netsh
の後に interface
をつければIP( v4 も v6 も)の設定ができるインターフェースコンテキストにスイッチします。
netsh interface ipv4 show interface
次の文でIP周辺の設定を行うことができます。
netsh interface ipv4 set address name="イーサネット" source=static address=xxx.xxx.xxx.xxx mask=xxx.xxx.xxx.xxx gateway=xxx.xxx.xxx.xxx
netsh
以降のそれぞれの簡単な説明は次の通り。
-
interface ipv4
= IPv4に関するもろもろをやっていきます! -
set address
= アドレスの変更を行います。 -
name="イーサネット"
= 変更の対象は"イーサネット"
って名前のインターフェースです。(netsh interface ipv4 show interface
で表示される名前と同じにする) -
source=static
= 静的にアドレスを設定します(動的にしたいならsource=dhcp
) -
address=... mask=... gateway=...
= IPアドレス、サブネットマスク、デフォルトゲートウェイはそれぞれコレです。
DNSサーバの設定は次の文で行います。まぁほぼ一緒です。
netsh interface ipv4 set dns name="イーサネット" source=static address=xxx.xxx.xxx.xxx register=primary validate=no
ちょっとややこしいとこだけ下で簡単に説明書いときます。
-
register=primary
= PCのIPアドレスの変更に対応します。DDNSですね。静的IPで設定してるなら必須です。よくわからなければとりあえずprimary
を指定しておけば問題なし。(ドメインネットワークならboth
推奨) -
validate=no
設定するIPアドレスの妥当性チェックをしてくれます。通常はyes
としますが、テスト環境ではno
にして不正な値に対する動作を確認したりしますね。
レジストリ(Registry)
ユーザの個人設定やインストールされたソフト、さらにOSの動作設定やハードウェアの構成まで、あらゆる設定はレジストリに格納されています。GUIでいじる場合には レジストリエディタ というものを利用します。
Linux に慣れてる人は GNOME の dconf-editor とかが近いかなって思います。
レジストリエディタは Windowsキー + R で開くウィンドウに regedit
と入力することで起動することができます。
レジストリエディタでレジストリに対する操作を行うことができます。コマンドプロンプトでどの設定ファイルをいじってるのか気になる人はレジストリエディタで確認するのがいいかなって思います。
今回は HKEY_CURRENT_USER
の下にあるデータを変更します。HKEY_CURRENT_USER
の下にあるのは、現在のログインユーザの設定ファイルたちです。その中でプロキシに関する設定ファイルは HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
にあります。
コマンドプロンプトからレジストリを操作するには reg
コマンドを使用します。
reg [操作] [キーのパス] /v [キーの名前] [オプション]
キーの値を操作するということで、[操作]
の部分は単純なCRUDだけ知っておけば十分かなって気がします。
- 値の取得
query
- 値の削除
delete
- 値の追加・削除
add
一例くらい挙げておきます。
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
[実行結果↓]
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyServer REG_SZ xxx.xxx.xxx.xxx:port
パスの HKEY_CURRENT_USER
は HKCU
という略称でも行けます。てかふつうは略称使います。まぁ今回はわかりやすくフルネームで。
さて、実際にプロキシのアドレスを設定するには次のように書きます。
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d xxx.xxx.xxx.xxx:port
/t
オプションはデータの型を指定します。文字列であれば REG_SZ
です。
/d
オプションで実際に入れたいデータを指定します。
プロキシを有効化するには次のように入力します。
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
REG_DWORD
は 32bit の整数型を表します。/f
は確認なしで強制実行させるオプションです。
完成版^^
@echo off
set /p choice=ネットワークを選択(^^♪ (1:A教室(有線), 2:B棟(有線), 3:C館(無線), 4:D室(無線,dhcp)):
if %choice%==1 (
rem A教室のネットワーク設定
set IFNAME="イーサネット"
set IPADDRESS=xxx.xxx.xxx.xxx
set SUBNETMASK=xxx.xxx.xxx.xxx
set DEFAULTGW=xxx.xxx.xxx.xxx
set DNSIPADDR=xxx.xxx.xxx.xxx
set PROXYURL=xxx.xxx.xxx.xxx:port
) else if %choice%==2 (
rem B棟のネットワーク設定
set IFNAME="イーサネット"
set IPADDRESS=xxx.xxx.xxx.xxx
set SUBNETMASK=xxx.xxx.xxx.xxx
set DEFAULTGW=xxx.xxx.xxx.xxx
set DNSIPADDR=xxx.xxx.xxx.xxx
set PROXYURL=xxx.xxx.xxx.xxx:port
) else if %choice%==3 (
rem C館のネットワーク設定
set IFNAME="Wi-fi"
set IPADDRESS=xxx.xxx.xxx.xxx
set SUBNETMASK=xxx.xxx.xxx.xxx
set DEFAULTGW=xxx.xxx.xxx.xxx
set DNSIPADDR=xxx.xxx.xxx.xxx
set PROXYURL=xxx.xxx.xxx.xxx:port
) else if %choice%==4 (
rem D室のネットワーク設定(プロキシなし、dhcpの場合)
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
goto end
)
netsh interface ipv4 set address name=%IFNAME% source=static address=%IPADDRESS% mask=%SUBNETMASK% gateway=%DEFAULTGW%
netsh interface ipv4 set dns name=%IFNAME% source=static address=%DNSIPADDR% register=primary validate=no
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d %PROXYURL%
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
:end
echo ネットワーク設定完了!
pause
おまけ Windowsのショートカットの作成
作成した switch_net.bat のショートカットを作成し、デスクトップに移動しておきます。
ショートカットで右クリック → 【プロパティ】を選択します。
開いたウィンドウ(詳細プロパティ)で【ショートカット】タブを選択し、【詳細設定】をクリックして「管理者として実行」にチェックをつけます。
詳細プロパティ ウィンドウを【OK】をクリックして閉じ、次に「ショートカットキー」と書かれた枠で任意のコマンドを割り当てます(自分は競合少な目なので Ctrl + Alt + N としました)。
これで今後はショートカットキーでサクッとネットワークの設定を行うことができますね