WindowsSetting Windows Setup Proxy 2019年 4月 23日
学内と学外でネットワークを切り替えるに当たって、もっとも課題になるのがプロキシの設定である。 macOS の場合、システムのネットワークに置いて場所の切り替え機能がある。 高専という場所を作成し、その場所にだけプロキシを設定するという技も可能である。 一方、Windows ではシステムでプロキシをオン・オフを切り替える必要があり、いちいち設定画面を開かなければならない。
私を含めプログラマは面倒なことが嫌いなので、なんとか自動化して楽をしたいと考えるものだ。 早速以下のページを見つけた。→ Windowsのプロキシを自動設定するタスクを作成
確認してみると PowerShell で環境設定まで含めた各種設定をするスクリプトを書き、そのスクリプトをネットワーク切り替えタスク時に自動実行するとのことである。 これだとネットワークを切り替えるだけで何もしなくていいのだが、うちの高専の場合には Web 認証があるため、タスク切り替えまでは無理そうだ (Web 認証を受けるまで、その先のネットワークに接続させてもらえないため)。 ただし、最低限スクリプトを実行するだけでも、かなり労力が減ると思われるので、うまく活用させていただくことにする。
以下、設定手順を示す。
$PROXY_HOST="svm-proxy02.edu.metro-cit.ac.jp"
$PROXY_PORT=15080
$LOCAL_ADDR="172.24.254.1;<local>"
$REG_KEY="HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings"
try {
$ignore = [System.Net.Dns]::GetHostAddresses(${PROXY_HOST}) | ? { $_.AddressFamily -eq "InterNetwork" }
Set-ItemProperty -path ${REG_KEY} ProxyEnable -value 1
Set-ItemProperty -path ${REG_KEY} ProxyServer -value "${PROXY_HOST}:${PROXY_PORT}"
Set-ItemProperty -path ${REG_KEY} ProxyOverride -value ${LOCAL_ADDR}
Set-Item -path env:HTTP_PROXY -value "http://${PROXY_HOST}:${PROXY_PORT}"
Set-Item -path env:HTTPS_PROXY -value ${env:HTTP_PROXY}
[Environment]::SetEnvironmentVariable("HTTP_PROXY", ${env:HTTP_PROXY}, [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", ${env:HTTP_PROXY}, [EnvironmentVariableTarget]::User)
} catch {
Set-ItemProperty -path ${REG_KEY} ProxyEnable -value 0
Remove-Item -path env:HTTP_PROXY
Remove-Item -path env:HTTPS_PROXY
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "", [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "", [EnvironmentVariableTarget]::User)
}
$source=@"
[DllImport("wininet.dll")]
public static extern bool InternetSetOption(int hInternet, int dwOption, int lpBuffer, int dwBufferLength);
"@
$wininet = Add-Type -memberDefinition ${source} -passthru -name InternetSettings
${wininet}::InternetSetOption([IntPtr]::Zero, 95, [IntPtr]::Zero, 0)|out-null
${wininet}::InternetSetOption([IntPtr]::Zero, 37, [IntPtr]::Zero, 0)|out-null
exit 0
PS C:\Users\hkob> Get-ChildItem env:
Name Value
---- -----
(中略)
HTTP_PROXY http://svm-proxy02.edu.metro-cit.ac.jp:15080
HTTPS_PROXY http://svm-proxy02.edu.metro-cit.ac.jp:15080
(後略)