外部のネットワークと社内のローカルネットワークを接続出来るVPN接続は便利な機能です。
社内のローカルネットワークのActive Directoryを使用してドメイン接続するWindowsノートPC(ローカルアカウントが使えない)を自宅に持っていき,ドメインアカウント(ADアカウント)でログオンしようとすると,この時にはVPN接続されていないため当然ドメインアカウントでWindowsにログオン出来ない。
これは,Active Directory環境が社内ローカルネットワークでしか使用出来ないから。
つまり,このようなPCを自宅に持って行ってADアカウントでWindowsにログオンする場合,前もってそのPCを社内のローカルネットワークにVPN接続しておく必要がある。
しかし,Windows PCのVPN接続操作はログオン後に操作できるようになっているので,このままではVPNに接続して社内ドメインのADアカウントでWindowsにログオンするという手順が実現できない。
この問題に対応するにはいくつかの方法があるのだが,PC側でWindowsにログオンする前にVPN接続する方法で対応してみる。
注意することとして,VPN接続するためには前もってグローバル IPネットワーク(公衆回線や通信キャリアの閉域網・・・)のアクセスポイントのどこかに接続しておく必要がある。
タスクスケジューラは,ログオン後に定期的に処理を行ったりする場合に利用するものだが,登録する時にログオンしていなくても実行出来るようにすることが出来る。
この機能を使ってPCが電源ON後にログインしていない状況でも,VPN接続するようにしてみる。
まず,VPN接続をコマンドで行えるBATファイルを作成する。このとき使用するVPN接続は,既に作成されていて接続出来るようになっているのが前提。
vpndial.batを作成します。
@echo off rasdial "VPN接続名" 接続する時のユーザー名 接続する時のパスワード
作成したvpndial.batを実行PATHが通っているディレクトリに置きます。(例:C:\WinApl\exe)
vpndial.vbsを作成して同様に実行PATHが通っているディレクトリに置きます。
CreateObject("WScript.Shell").Run "c:\WinApl\exe\vpndial.bat",0
vpndial.batをそのまま実行すると,実行している時のウィンドウ画面が表示されてしまいます。なので,vpndial.vbsからvpndial.batを実行するようにするとこのウィンドウ画面が表示しないようにすることが出来ます。
タスクスケジューラでは,定期的にVPN接続されているかどうか確認し,接続されていない場合は上記のvpndial.vbsを使用してVPN接続するようにします。
このために,PowerShellスクリプトを作成します。
vpnconnect.ps1ファイルを以下の内容で作成します。
$A = ipconfig | Select-String 192.168.25 if($A.length -eq "0"){ C:\WinApl\exe\vpndial.vbs }else{ echo "OK" }
ipconfigコマンドを使って接続されているか確認しています。
192.168.25.xは,vpnで接続してアサインされるネットワークアドレスの例です。
BATファイルvpnconnect.batの場合は,
@echo off set A= for /f "usebackq delims=" %%i in (`ipconfig ^| findstr 192.168.25`) do set A=%%i if not defined A ( C:\WinApl\exe\vpndial.vbs ) else ( echo OK )
でも同じように動作します。
vpnconnect.vbsも作成します。
CreateObject("WScript.Shell").Run "powershell c:\winapl\exe\vpnconnect.ps1", 0
vpnconnect.ps1とvpnconnect.vbsを,実行PATHが通っているディレクトリに置きます。(例:C:\WinApl\exe)
これでタスクスケジューラに登録出来た。
PCを電源オン後は,15分間間隔で自動でVPN接続するようになります。すでに接続している場合は,そのままで何もしません。
新しくコメントをつける