はじめに
本学のネットワークでは、プロキシを設定しないと学外にWeb接続することができない。すべての設定の前にプロキシの設定をしておく。ただし、macOS と異なり、Windows 自体に場所ごとにプロキシをオンオフしたりする機能はない。メーカーによっては特別なアプリを追加してこれらを可能にしているものもあるが、今回は PowerShell を使った自動設定システムを構築してしまう。ここに書いた内容は、以下のサイトに書かれたものをうちの高専用にカスタマイズしたものである。→ Windowsのプロキシを自動設定するタスクを作成
PowerShell スクリプトの作成
- まずスクリプトを置く場所(binディレクトリ)を設定しておく。このために、PowerShell を実行する。Windows メニューの上で右ボタンを押して「Windows PowerShell」をクリックする。
- PowerShell が開いたら「mkdir bin」とすると「bin」ディレクトリが作成される。
- PowerShell を閉じて、エクスプローラで「ローカルディスク(C:)」「ユーザ」「ユーザ名(私の場合は hkob)」「bin」の順番で辿っていく。ここは先ほど作ったばかりなので空のはずである。ここで、右ボタンから「新規」「テキストドキュメント」を作成する。名前は「configure-proxy.ps1」とでもしておく。
- ダブルクリックするとメモ帳が開くので、以下のスクリプトを記載する。ただし、「指定されたプロキシサーバアドレス」「指定されたポート番号」「指定された認証サーバのアドレス」については、macOS 版と同様にmoodle のページ(https://ee.metro-cit.ac.jp/m/mod/page/view.php?id=3110)を参照すること。
$PROXY_HOST="指定されたプロキシサーバアドレス" $PROXY_PORT=指定されたポート番号 $LOCAL_ADDR="指定された認証サーバのアドレス;<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 Set-Item -path env:HTTP_PROXY -value "aaa" Set-Item -path env:HTTPS_PROXY -value "aaa" 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
- メモ帳で記述したファイルは実際には「configure-proxy.ps1.txt」という名前で保存されている。この名前を変更するために、再度 PowerShell を起動し、以下のコマンドを実行する(\ は実際には¥が表示される。またcの後にタブキーを打つと自動的に名前が保管されるので、自分でタイプしないこと。二個目の名前を保管したら .txt を消せばよい)。
cd bin ren .\configure-proxy.ps1.txt .\configure-proxy.ps1
- これで PowerShell のコマンドになったので、右ボタンで実行が可能になる。
- 「設定」「ネットワークとインターネット」「プロキシ」を見るとちゃんとプロキシサーバが設定されていることがわかる。
ダブルクリックでの実行
これを毎回右ボタンで実行するのは面倒なので、ダブルクリックで実行できるように設定する。
- bin ディレクトリに作成した「configure-proxy.ps1」のショートカットをデスクトップに作成する。アイコンをデスクトップに移動している時に「シフトキー」と「コントロールキー」の二つを同時に押すと「デスクトップにリンクを作成」とメッセージが変わるので、そこでドラッグを止めればよい。できるとこんな感じになる。
- このショートカットで右ボタンを押して「プロパティ」を表示する。ここでリンク先には「C:\Users\アカウント名\bin\configure-proxy.ps1」と表示されているはずである。この名前の前にカーソルを移動し、「PowerShell -ExecutionPolicy ByPass 」の文字列を追加する。この結果「PowerShell -ExecutionPolicy ByPass C:\Users\アカウント名\bin\configure-proxy.ps1」のようになればよい。
- この変更によりアイコンはこんな感じになる。このアイコンをダブルクリックすることで実行が可能になる。このスクリプトを高専のネットワークに接続した時に実行するとプロキシが自動設定され、自宅などの別のネットワークに接続した時に実行すると自動的にプロキシが外れてくれる。
ちなみにこのスクリプトはシステムの環境変数も設定してくれる。PowerShell にて「Get-ChildItem env:」として見ると、「HTTP_PROXY」と「HTTPS_PROXY」の環境変数が自動設定されているのが確認できる。
次の記事:パッケージ管理ソフトウェアの設定(macOS) - BYOD PC のセッティング(3) - hkob’s blog
- 前の記事: 学内プロキシ設定 (macOS) - BYOD PC のセッティング(1) - hkob’s blog