固定グローバルIPアドレスを使用しているわけではないので、
変更されてしまうと困ったことになります。
ちなみに、フレッツ光を自宅では使用しているのですが、
グローバルIPアドレスを固定にするには、タダではありませんし、
今のところ、お金を払うほど必要としているわけでもありません。
まあ、そうそう変わることはないと思うのですが、
変わったら、そのことをメールで通知させることはできないか?
ということを考えてみました。
メールで教えてくれれば、その都度、Subversion の接続を変えればいいと
思うわけです。
幸いなことに、内部(自宅内のPC)から接続すれば、グローバルIPアドレスが
何なのか教えてくれるWEBサイトがあります。
ということは、そのようなWEBサイトにアクセスして、
IPアドレスを抽出して、前回確認時と比較して、不一致だったらメール送信、
という処理を作成すればよいわけです。
んでもって、それをタスクで定期的に実行させれば、望み通りとなります。
以上の考えを元に、PowerShell スクリプトを作成してみました。
PowerShell は今回が初めてだったので、結構苦労しました・・・
グローバルIPアドレスを確認するWEBサイトは、以下を使用させて頂くことにしています。
自分のグローバルIPアドレス確認ツール、「IP君」
HTMLのBODY部に依存しているので、
確認に使用するWEBサイトが変われば、PowerShell スクリプト修正が必要です・・・
もし、ご利用される方がいらっしゃいましたら、
「# メール送信アドレス」の $smtp (メール・サーバー)、$to (メール送信先アドレス)、
$from (メール送信元アドレス) を修正してやってください。
get_GlobalIP.ps1
# 接続先URL $url = "http://www.axisnetworks.biz/tools/gip/" Write-Output "接続先: $url" # メール送信先アドレス $smtp = "xxxxx.ne.jp" $to = "xxxx@yyyyy.com" $from = "xxxx@xxxxx.ne.jp" # グローバルIPアドレス保存用ファイル $path = Split-Path $MyInvocation.MyCommand.Path -Parent $file = Join-Path $path get_GlobalIP.txt # ファイル存在確認&前回確認時のIPアドレス読込み If (Test-Path $file) { $old_address = Get-Content $file } else { $old_address = "<記録なし>" } Write-Output "前回確認済みのグローバルIPアドレス: $old_address" # GETリクエスト実行 $req = [System.Net.WebRequest]::Create($url) $req.Method=”GET” $resp=$req.GetResponse() # レスポンスの読込み&確認 $encode = $resp.ContentEncoding $sr = New-Object IO.StreamReader($resp.GetResponseStream(), $resp.ContentEncoding) while ( ($line = $sr.ReadLine()) -ne $null ) { $line = $sr.ReadLine() if ($line -like '*<p class="style4" name="ip">*') { if ($line -match "(?<address>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)") { $new_address = $matches.address if ($old_address -eq $new_address) { Write-Output "IPアドレス変更なし: $old_address == $new_address" } else { Write-Output "IPアドレスが変更: $old_address -> $new_address" # ファイル上書き Write-Output "ファイル更新: $file" $matches.address | Out-File -FilePath $file # メール送信 Write-Output "メール送信: $to" $mail = New-Object Net.Mail.MailMessage($from, $to) $mail.Subject = "グローバルIPアドレス変更" $mail.Body = "IPアドレスが変更: $old_address -> $new_address" $mail.SubjectEncoding = [Text.Encoding]::GetEncoding("ISO-2022-JP") $mail.BodyEncoding = [Text.Encoding]::GetEncoding("ISO-2022-JP") $sc = New-Object Net.Mail.SmtpClient($smtp) $sc.Send($mail) $mail.Dispose() } } } } $sr.Close() $resp.Close()
実行は、コマンド・プロンプトで以下のように実行します。
> powershell .\get_GlobalIP.ps1
最後に、powershell.exe、get_GlobalIP.ps1 ともにフルパスを指定して、
タスク登録すれば完成です。(= ̄▽ ̄=)V
ちなみに、これまでに(自分のように)PowerShell を実行したことがなければ、
以下のようなエラーが表示されるかもしれません。
スクリプトの実行がシステムで無効になっているため、ファイル C:\(配置場所)\get_GlobalIP.ps1 を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
上記エラーが出た場合、PowerShell の実行ポリシーを変更する必要があります。
管理者で起動したコマンド・プロンプトにて、以下を実行します。
> powershell Set-ExecutionPolicy RemoteSigned