目次
【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は「運用監視の自動化ツール」としても強力です。
小さく始めて、徐々にログ解析・通知連携などに拡張していきましょう。




