目次
【PowerShell応用編】ネットワーク監視を自動化する方法|ping不要の死活監視スクリプト
ネットワーク障害の早期発見やサーバ死活確認を自動化したい場合、
PowerShellを使えばシンプルに実現できます。
本記事では、
ICMPが禁止されている環境でも動作するPowerShell監視スクリプトを紹介します。
定期実行により、Web・DB・APIサーバなどの稼働状態を自動でチェック可能です。
スポンサーリンク
🧭 概要
多くの企業ネットワークでは、セキュリティ上の理由から
ICMP(ping)通信が遮断 されています。
そのため、従来の
ping コマンドによる監視が使えないケースもあります。
しかし PowerShell 7 以降の
Test-Connection -Port を使えば、
TCPレベルでの疎通確認 が可能です。
これを活用して、
ping不要の自動監視スクリプトを構築していきます。
⚙️ 1. 監視対象リストの作成
まず、監視対象となるホストとポートを配列として定義します。
|
1 2 3 4 5 6 |
$targets = @( @{Name="Web"; Host="web01"; Port=443}, @{Name="DB"; Host="db01"; Port=1433}, @{Name="API"; Host="api01"; Port=8080} ) |
🧩 2. TCPレベルの疎通チェック
Test-Connection -Port を利用して、ポート単位で死活確認を行います。
ICMPが禁止されていても、TCP通信が通れば「OK」と判定できます。
|
1 2 3 4 5 6 |
foreach ($t in $targets) { $result = Test-Connection $t.Host -Port $t.Port -Quiet $status = if ($result) { "OK" } else { "NG" } Write-Output "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') $($t.Name): $status" } |
出力例:
|
1 2 3 4 |
2025/11/01 08:30:00 Web: OK 2025/11/01 08:30:00 DB: NG 2025/11/01 08:30:00 API: OK |
📦 3. ログファイルへの出力
監視結果をファイルに追記して履歴に残します。
|
1 2 3 4 5 6 7 |
$logPath = "C:\Scripts\NetworkMonitor.log" foreach ($t in $targets) { $result = Test-Connection $t.Host -Port $t.Port -Quiet $status = if ($result) { "OK" } else { "NG" } "$((Get-Date).ToString('yyyy/MM/dd HH:mm:ss')),$($t.Name),$($t.Host),$($t.Port),$status" | Out-File -Append -FilePath $logPath } |
結果例(CSV形式):
|
1 2 3 4 |
2025/11/01 08:30:00,Web,web01,443,OK 2025/11/01 08:30:00,DB,db01,1433,NG 2025/11/01 08:30:00,API,api01,8080,OK |
📬 4. メール通知を追加(オプション)
障害検知時に自動メール通知する場合は
Send-MailMessageを使います。
|
1 2 3 4 5 6 7 8 9 |
if ($status -eq "NG") { Send-MailMessage ` -From "monitor@domain.local" ` -To "admin@domain.local" ` -Subject "【アラート】$($t.Name) サーバ接続不可" ` -Body "Host: $($t.Host) Port: $($t.Port) がNGです。" ` -SmtpServer "mail.domain.local" } |
💡 TeamsやSlackに通知する場合は、Webhook URLに
Invoke-RestMethodを使えばOKです。
⏰ 5. 定期実行(Windowsタスクスケジューラ)
作成したスクリプトを
.ps1ファイルとして保存し、
タスクスケジューラで自動実行を設定します。
| 項目 | 内容 |
|---|---|
| トリガー | 1時間ごと |
| 操作 | powershell.exe -File "C:\Scripts\NetworkMonitor.ps1" |
| 実行時の権限 | 「最上位の特権で実行」にチェック |
これで、サーバの死活状態が定期的に監視され、
障害発生時は即座に検知できます。
🧠 応用:HTTPレスポンス監視
Webサーバの応答確認には
Invoke-WebRequestを使う方法も有効です。
|
1 2 3 4 5 6 7 |
$response = Invoke-WebRequest "https://example.com" -UseBasicParsing -ErrorAction SilentlyContinue if ($response.StatusCode -eq 200) { "Webサーバ稼働中" } else { "応答異常:$($response.StatusCode)" } |
StatusCode 200が返れば正常稼働。
API監視やWebアプリ死活確認にも応用可能です。
🔗 関連記事
- ICMP禁止環境で疎通確認する3つの方法
- Test-Connectionの基本使い方|Pingとの違いと応用
- netstatで通信ポートを確認する方法
- PowerShellでログ出力を自動化する方法(予定)
🧾 まとめ
Test-Connection -Portを使えば、ICMP禁止環境でも死活確認可能- ログ出力やメール通知で、自動監視をシンプルに構築可能
- スケジューラ設定で運用自動化が実現
PowerShellは「運用監視の自動化ツール」としても強力です。
小さく始めて、徐々にログ解析・通知連携などに拡張していきましょう。




