| Works
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"が使えたんじゃないかとも。