Webサービスの監視やリンクチェック、APIの死活確認などでは、複数のURLに対して定期的にHTTPステータスを確認する処理が必要です。PowerShellを使えば、簡潔なスクリプトで複数のURLにアクセスし、応答ステータスコード(200/404/500など)を取得して一覧表示できます。この記事では、HTTPレスポンスの監視スクリプトを紹介します。
基本的なHTTPステータスチェック
Invoke-WebRequest
を使えば、指定したURLへのHTTPレスポンスを取得できます。
$response = Invoke-WebRequest -Uri "https://example.com" -UseBasicParsing
$response.StatusCode
複数URLをまとめて確認するスクリプト
$urls = @(
"https://www.google.com",
"https://www.example.com/notfound",
"https://nonexistent.domain.test"
)
foreach ($url in $urls) {
try {
$res = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 5
Write-Output "$url → $($res.StatusCode)"
} catch {
Write-Output "$url → エラー:$($_.Exception.Message)"
}
}
ポイント:
TimeoutSec
で応答遅延による無限待機を防止- 存在しないURLやDNSエラーも
try-catch
で処理可能
結果をCSVに保存する例
$results = @()
foreach ($url in $urls) {
try {
$res = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 5
$status = $res.StatusCode
} catch {
$status = "Error"
}
$results += [PSCustomObject]@{
URL = $url
Status = $status
Time = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
}
}
$results | Export-Csv -Path ".\url_status_log.csv" -NoTypeInformation -Encoding UTF8
特定ステータスだけ通知する例
foreach ($url in $urls) {
try {
$res = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 5
if ($res.StatusCode -ne 200) {
Write-Warning "$url に異常なステータス:$($res.StatusCode)"
}
} catch {
Write-Warning "$url にアクセスできません:$($_.Exception.Message)"
}
}
補足:ヘッドリクエストで軽量化
コンテンツ取得が不要でステータス確認だけしたい場合は Method HEAD
を使います:
Invoke-WebRequest -Uri $url -Method Head -UseBasicParsing
まとめ
PowerShellを使えば、複数のURLに対してHTTPステータスを簡単にチェックでき、応答コードやエラーのログ取得、通知などに応用可能です。監視対象が静的WebサイトでもREST APIでも構わず対応できるため、運用監視やCI/CD前のリンク確認など、さまざまな用途に活用できます。