2018/01/10

ネットワークとプロキシを切り替えるコマンドでバッチを作りました

コマンド 


Wi-Fiを切り替えるバッチを作りましたので紹介します。

仕事で社内用無線LANと社外用無線LANをちょくちょく切り替えることがあり面倒になってきたので、 ネットワークを切り替えるバッチファイルを作ってみました。

社内用無線LANはプロキシ環境なので、 インターネットオプションのプロキシ設定も自動でON/OFFしてみます。




面倒くさい状況(前提条件)

環境

ネットワーク環境

  • 社内用無線LAN。プロキシ設定あり
  • 社外用無線LAN。プロキシ設定なし

使用PC

  • ノートPC
  • Windows10

やる手順

  1. 無線ネットワークを切り替える。
  2. インターネットオプションを開く。
  3. プロキシ設定をON/OFFにする。

2,3回でしたらまだいいですが、何度も切り替えることになると、やはり面倒くさいです。


ネットワーク切り替えコマンド

DOSコマンドの netshを使うとネットワークを切り替えることができます。


接続可能なプロファイルを確認する

コマンドプロンプトで netsh wlan show profileを実行してみます。

接続可能なプロファイル(SSID,識別子)が表示されますので、その名前を控えておきましょう。

※そもそも切り替えたい対象はわかっていると思うので、一応確認する程度でOK


ネットワークに接続する

ネットワークに接続するためには、 netsh wlan connect name=[プロファイル]を実行します。

「接続要求が正常に完了しました。」と表示されればOKです。


ネットワークから切断する

ネットワークから切断したい場合は、 netsh wlan disconnectを実行します。

「インターフェイス "Wi-Fi" の切断要求が正常に完了しました。」と表示されればOKです。


プロキシ設定コマンド

プロキシ設定は、レジストリの設定を書き換えることで変更ができます。


「LANにプロキシサーバを使用する」チェックボックス

プロキシ設定をONにするには、次のコマンドを実行します。

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1

「この操作を正しく終了しました。」と表示されればOKです。


逆に、プロキシ設定をOFFにするには、次のコマンドを実行します。

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0

こちらも「この操作を正しく終了しました。」と表示されればOKです。


「アドレス」「ポート」を設定する

プロキシサーバを使用しないサーバを指定するには、次のコマンドを実行します。

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyServer /t reg_sz /d プロキシサーバー:ポート番号

「この操作を正しく終了しました。」と表示されればOKです。

プロキシサーバー:ポート番号 の部分はご自身の環境に合わせて修正してください。


「次で始まるアドレスにはプロキシを使用しない」を設定する

プロキシ除外設定をするには、次のコマンドを実行します。

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyOverride /t reg_sz /d "[アドレス]"

複数設定したい場合はセミコロン(;)で区切ります。

GUIから設定するときと同じですね。

アドレス の部分はご自身の環境に合わせて修正してください。


「ローカルアドレスにはプロキシサーバーを指定しない」チェックボックス

「ローカルアドレスにはプロキシサーバーを指定しない」にチェックを入れるには、次のコマンドを実行します。

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyOverride /t reg_sz /d "[アドレス];<local>"


プロキシ除外設定のコマンドの末尾に <local>を追記する形となります。

「この操作を正しく終了しました。」と表示されればOKです。

こちらも、アドレス の部分はご自身の環境に合わせて修正してください。


プロキシ設定が反映されない問題

もし、IEやインターネットオプションが先に起動されていた場合、上で示したコマンドだけでは自動で反映されません。

キャッシュが残っているためです。


そのため、次の2つの方法で対応します。


Windows API(InternetSetOption)を利用する

まず、InternetSetOptionというAPIを呼び出すEXEファイルを作成します。


#include 
#pragma comment(lib,"wininet")

#include <windows.h>
#include <wininet.h>

main(){
  BOOL bResult1 = InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0);
  BOOL bResult2 = InternetSetOption(0, INTERNET_OPTION_REFRESH, 0, 0);
  return bResult1 && bResult2;
}

こちらのC++をVisualStudioないしg++でコンパイルします。


できあがったEXEファイルを、プロキシ設定変更の後に実行すればOKです。


インターネットオプションを再度開いてOKボタンを押す

もしコンパイルが大変でしたら、インターネットオプションを再度開いてもOKです。

けっきょく手間になるので面倒くさいですが、「OKボタン」を押すだけなら...という妥協案です。


プロキシ設定変更の後に、 inetcpl.cplを実行します。

インターネットオプションが開くので、プロキシ設定がされていることを確認し「OKボタン」を押せばOKです。



作成したバッチファイルがこちらです

上のコマンドを利用して、batファイルを作成してみました。

※動作の保証はいたしかねます。


今回は、EXEファイルをコンパイルする環境がなかったのと、自分で使うバッチファイルなので、手間は残りますがインタネットオプションを開く方式を採用しました。


また、アドレスやポートの設定はすでに行っていたのと、プロキシ設定をON/OFFにすれば事足りましたので最小限のコード量です。


社内無線LANにつなぐバッチファイル

社内無線LANにつなぐ.bat というファイルを作成します。 ※ファイル名はなんでもいいです。

@echo off

rem 社内無線LANに接続
netsh wlan disconnect
netsh wlan connect name=[社内無線LANプロファイル]

rem プロキシ設定ON
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1

rem インターネットオプションを開く
inetcpl.cpl

pause

[社内無線LANプロファイル] の部分をご自身の環境に合わせて修正してください。


社外無線LANにつなぐバッチファイル

社外無線LANにつなぐ.bat というファイルを作成します。 ※ファイル名はなんでもいいです。

@echo off

rem 社外無線LANに接続
netsh wlan disconnect
netsh wlan connect name=[社外無線LANプロファイル]

rem プロキシ設定OFF
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0

rem インターネットオプションを開く
inetcpl.cpl

pause

[社外無線LANプロファイル] の部分をご自身の環境に合わせて修正してください。


[番外編] バッチをいつでも実行できるようにしよう

作成したバッチファイルをいつでも実行できるように、3つの方法を紹介します。

※ここからは好みの話になります。


batファイルをタスクバーに登録する(ショートカット編)

私はよく使うアプリケーションをWindowsタスクバーにピン止めするのが好きなので、バッチファイルも登録したりします。


ただ、Windows7から(?)バッチファイルをタスクバーに登録できなくなってしまったようなので、一工夫が必要です。


コマンドプロンプトから実行する形に変換すればタスクバーに登録できるので、次の手順を行います。


  1. 作成したbatファイルを「右クリック」->「ショートカットの作成(S)」をクリックする。
  2. ショートカットファイルを「右クリック」->「プロパティ(R)」をクリックする。
  3. リンク先(T):を「C:\Windows\System32\cmd.exe /c [batファイルパス]」に変更する。
  4. ショートカットファイルをWindowsタスクバーにドラッグ&ドロップする。

これで完了です。


ですが、複数のバッチファイルをタスクバーに登録しようとすると、その分だけアイコンができてしまいます。

数が多くなるとつらいですね。


その場合は次の方法をお勧めします。


batファイルをタスクバーに登録する(VBScript編)

batファイルを呼び出すだけのVBScriptファイルをタスクバーに登録することで、アイコンが複数できてしまう問題を解決できます。


次のようなvbsファイルを作成します。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "cmd.exe /c [batファイルパス]"

作成したvbsファイルをWindowsタスクバーにドラッグ&ドロップする。

これで完了です。


好みのランチャーに登録する

ランチャーに設定すればもっと楽にバッチファイルを実行できることでしょう。

私は ArtTipsというランチャーを好んで使っています。

ここでは特にランチャーの説明はしませんが、個人の楽なやり方でバッチファイルを実行できるのでかなりお勧めです。



このエントリーをはてなブックマークに追加     

profile
profile

洋ちゃん

@yo-chan

システムエンジニアをしています。二児の父です。

夢は天井から床までビッシリ並んだ本棚のある書斎を作ること!