URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

PowerShellでWebページの応答をチェック

 業務で複数のWebページの応答を確認しながらネットワーク機器の切り替えをすることになったので即興で作ったスクリプト。
 参考にしていた過去の実績だと手作業でブラウザを操作する内容になっていたので、さすがにそういうのからは脱却しないと。欲をいえばメインの作業も自動化したかったけど、ケーブルの抜き差しとか物理作業があったので仕方ない。

 作業端末のOSがWindows 10なので、そこで実行するためにPowerShellを使用。
 確認対象のWebページは80くらいあったので、別ファイルにわけて管理できた方がよいか思った。
 あとは適当に(時間もなかったので)。

Add-Type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Get-Content .\UrlList.txt | ForEach-Object { $Res = $Null $ErrCode = $Null Write-Host "========================================" Write-Host "URL:" $_ try { $Res = Invoke-WebRequest -Uri $_ -Method GET } catch { $ErrCode = $_.Exception.Response.StatusCode.Value__ $ErrDesc = $_.Exception.Response.StatusDescription } if ([string]::IsNullOrEmpty($ErrCode)) { Write-Host "Status:" $Res.StatusCode Write-Host "Headers --------------------------------" } else { Write-Host "Status:" $ErrCode Write-Host "Description:" $ErrDesc } $Res.Headers Start-Sleep 2 } Write-Host "========================================"

 前半部分の"Add-Type ~"から"[Net. ~"までの部分で、SSLに自己証明書を使っているページへの対応とプロトコルにTLS 1.2を使うように指定。
 あとは別ファイルからURLを読み込んで、ひたすら"Invoke-WebRequest"を繰り返すだけです。
 エラーの時のステータス("403"とか"404")の取り方に若干手間取りました。ヘッダーを出力するようにしているのは、今回の作業のエビデンスとして取っておきたかったからというだけですね。

 リストファイル"UrlList.txt"はURLリストを列記するだけ。

https://www.example.com/index.htlm https://www.example.com/cgi-bin/check.cgi https://app.example.com

 そんなこんなで作業準備を整えたわけですが、Windows 10ならWindows Subsystem for Linuxで"curl"が使えたんじゃないかとも。