【PowerShell】指定ホストのPing監視を自動化する方法

【PowerShell】指定ホストのPing監視を自動化する方法 PowerShell

ネットワーク機器やサーバーの稼働状況を定期的に確認したい場合、Pingによる死活監視はシンプルかつ有効な手段です。PowerShellを使えば、複数のホストに対してPingを実行し、応答がない場合に通知を出したりログに記録したりする監視スクリプトを簡単に自動化できます。この記事では、PowerShellによるPing監視の実装方法と運用例を紹介します。

基本的なPingコマンド(Test-Connection)


Test-Connection -ComputerName 192.168.0.10 -Count 1 -Quiet

-Quiet を使うと、結果が True(応答あり)または False(応答なし)で返ってくるため、条件分岐に使いやすくなります。

単一ホストを監視するスクリプト


$host = "192.168.0.10"

if (-not (Test-Connection -ComputerName $host -Count 1 -Quiet)) {
    $msg = "Ping失敗:$host に応答がありません。"
    Write-Output $msg

    # ポップアップ通知
    $wshell = New-Object -ComObject Wscript.Shell
    $wshell.Popup($msg, 0, "Ping監視アラート", 48)
}

複数ホストをまとめて監視する


$hosts = @("192.168.0.10", "192.168.0.20", "google.com")
foreach ($host in $hosts) {
    $result = Test-Connection -ComputerName $host -Count 1 -Quiet
    if ($result) {
        Write-Output "$host は応答あり"
    } else {
        Write-Output "$host は応答なし"

        # 必要に応じて通知やログ出力も
    }
}

監視結果をログファイルに出力


$logPath = "C:\Logs\ping_monitor_$(Get-Date -Format 'yyyyMMdd').log"
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

foreach ($host in $hosts) {
    $status = if (Test-Connection $host -Count 1 -Quiet) { "OK" } else { "NG" }
    Add-Content -Path $logPath -Value "$timestamp [$status] $host"
}

定期的に実行するには(自動化)

作成したスクリプトを monitor_ping.ps1 などの名前で保存し、Windowsタスクスケジューラで一定間隔(5分おき、毎時など)で実行するように設定します。


powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\monitor_ping.ps1"

メール通知に拡張する例


if (-not (Test-Connection "192.168.0.10" -Count 1 -Quiet)) {
    Send-MailMessage -To "admin@example.com" -From "monitor@example.com" `
        -Subject "Ping失敗通知" -Body "対象ホストに応答がありません。" `
        -SmtpServer "smtp.example.com"
}

※ メール送信には、SMTPサーバーや認証設定が必要になる場合があります。

まとめ

PowerShellを使えば、Pingによる死活監視を簡単に自動化できます。小規模なネットワークであれば、複雑な監視ツールを導入せずとも、PowerShellスクリプトとタスクスケジューラの組み合わせで、十分実用的な監視体制が構築できます。ログ記録、通知、メール送信などとの組み合わせにより、日常のインフラ運用を効率化しましょう。