【PowerShell】複数のURLに対してHTTPステータスをチェックする方法

【PowerShell】複数のURLに対してHTTPステータスをチェックする方法 PowerShell

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前のリンク確認など、さまざまな用途に活用できます。