読者です 読者をやめる 読者になる 読者になる

WindowsでVPNの自動再接続を行う

Windows PowerShell

Windowsの起動時に自動的にVPN接続をするという形で起動時に自動的にVPNへ接続できるようにしたわけですが、なぜか1日経つとVPN接続が切れてしまうので再接続を行えるようにしました。
バッチファイルとPowerShellスクリプトとタスクスケジューラを組み合わせてるんですが、なんか簡単な方法ないですかね…。

以下設定メモ
まずは前回のコマンドを記録したVPNに接続を行うバッチファイルを作成します。C:\vpn\vpn.batに保存してあります。ネットワーク名は「RaspberryPi」にしてあります。

@echo off
start RasDial "RaspberryPi" %ユーザー名% %パスワード%

ちなみにPowerShellで同じコマンド打ってもエラーが出て接続してくれませんでした。

次にVPNに接続しているかどうかを確認して、接続がなかった場合VPNの接続を行うバッチファイルを呼び出すPowerShellスクリプトを書きます。C:\vpn\vpn.ps1に保存しました。

$A = ipconfig | Select-String RaspberryPi

if($A.length -eq "0"){
   C:\vpn\vpn.bat
}else{
   echo "OK"
}

ipconfigに「RaspberryPi」というネットワーク名が無ければVPNに接続していないので、「ipconfig | Select-String RaspberryPi」のlengthが「0」になります。
「0」が返ってきたらC:\vpn\vpn.batを実行すればVPNの接続が完了です。

次にタスクスケジューラを使って、30分ごとにvpn.ps1を呼び出す設定をします。
タスクスケジューラのプログラムにPowerShellスクリプトを直接登録してもメモ帳で開かれておしまいなので、PowerShellの実体に-cオプションでスクリプトファイルを渡す設定にします。
PowerShellの実体は多分「C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe」というパスにあるはずです。

タスクスケジューラで新しいタスクを作成したら、トリガーの設定で「毎日」にして「繰り返し間隔」を「30分」、継続時間を「1日間」に設定します。
f:id:k-side:20140328120708p:plain

操作の編集では先ほどの通り「プログラム/スクリプト」に「C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe」を設定。「引数の追加」に「-c "c:\vpn\vpn.ps1"」を入れておきます。
f:id:k-side:20140328120709p:plain

これで30分間隔でネットワークの状態をチェックして、VPNの接続が無ければVPNに接続しにいくようにできるはずです。