Powershell Windows11 パソコン関連 自宅サーバ

PowerShellでFWポリシーとアプリケーションサーバの疎通を簡易監視する

今回は、PowerShellで特定のIPアドレス・ポートに対して、定期的にTCP接続確認を行う簡易スクリプトを作りました。

  • ファイアウォールのポリシーが正しく許可されているか確認したい
  • アプリケーションサーバの待受ポートが開いているか確認したい
  • 一時的な通信断やサービス停止が発生していないか見たい
  • サーバ再起動や設定変更中に、ポートの状態を継続的に見たい

本格的な監視であれば Zabbix や Prometheus、死活監視サービスなどを使うべきですが、「今この場で数秒おきにポートが開いているか見たい」くらいであれば、PowerShellだけでも十分確認できるので作りました。

⚠ 注意事項

設定内容やプログラムの内容は、用途・環境に応じて適切なものが変わります。

各種設定値や環境情報についてよく理解を深め、壊れてもよい環境で十分に検証してください。

なるべく正確に書くよう心掛けていますが、本投稿内容を実施される際には自己責任の下でお願いいたします。

作ったスクリプト

今回作成したスクリプトは以下です。

$ip = "10.0.0.152"
$port = 54322
$interval = 3

Write-Host "${ip}:${port} のポート監視を開始します。 (停止するには Ctrl + C)" -ForegroundColor Cyan
Write-Host "--------------------------------------------------"

while ($true) {
    # 現在の時刻を取得
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    
    try {
        # TcpClient を使って接続テスト(タイムアウト1秒)
        $client = New-Object System.Net.Sockets.TcpClient
        $connection = $client.BeginConnect($ip, $port, $null, $null)
        $success = $connection.AsyncWaitHandle.WaitOne(1000, $false)
        
        if ($success -and $client.Connected) {
            Write-Host "[$timestamp] 接続成功 (Open)" -ForegroundColor Green
            $client.Close()
        } else {
            Write-Host "[$timestamp] 接続失敗 (Closed / Timeout)" -ForegroundColor Red
        }
    }
    catch {
        Write-Host "[$timestamp] エラー発生: $_" -ForegroundColor Yellow
    }
    
    # 指定秒数待機
    Start-Sleep -Seconds $interval
}

何をしているか

最初に、確認したい接続先を指定しています。

$ip = "10.0.0.152"
$port = 54322
$interval = 3

$ip が接続先のIPアドレス、$port が確認したいポート番号です。
$interval は何秒おきに確認するかを指定しています。

この例では、10.0.0.15254322 番ポートに対して、3秒おきに接続確認を行います。

TCP接続確認の部分

実際に接続確認しているのは、この部分です。

$client = New-Object System.Net.Sockets.TcpClient
$connection = $client.BeginConnect($ip, $port, $null, $null)
$success = $connection.AsyncWaitHandle.WaitOne(1000, $false)

TcpClient を使って、対象のIPアドレスとポートにTCP接続を試みています。
ここでポイントなのは、BeginConnectWaitOne を使っているところです。
単純に Connect() を使うと、接続できない場合に待ち時間が長くなることがあります。

今回は、FWの疎通確認やアプリケーションサーバの稼働確認に使いたかったので、1回の確認で長く待たされるのは避けたいです。
そのため、タイムアウトを1秒にしています。

$success = $connection.AsyncWaitHandle.WaitOne(1000, $false)

結果表示

接続できた場合は、緑色で表示します。

Write-Host "[$timestamp] 接続成功 (Open)" -ForegroundColor Green

接続できなかった場合は、赤色で表示します。

Write-Host "[$timestamp] 接続失敗 (Closed / Timeout)" -ForegroundColor Red

実行すると、以下のような表示になります。

10.0.0.152:54322 のポート監視を開始します。 (停止するには Ctrl + C)
--------------------------------------------------
[2026-06-01 10:00:01] 接続成功 (Open)
[2026-06-01 10:00:04] 接続成功 (Open)
[2026-06-01 10:00:07] 接続失敗 (Closed / Timeout)
[2026-06-01 10:00:10] 接続成功 (Open)

タイムスタンプ付きで結果が出るので、
「何時何分頃に一時的に接続できなかったのか」が分かりやすいです。

FWポリシーの確認に使う

今回このスクリプトを作った主な理由は、ファイアウォールのポリシーテストです。

FWの設定変更を行ったあとに、

  • 想定した通信だけ許可されているか
  • 対象ポートに対して接続できるか
  • ポリシー変更の反映タイミングで通信が切れないか
  • サーバ側ではなくFW側で止められていないか

といったことを確認したい場面がありました。

もちろん、1回だけなら Test-NetConnection でも確認できます。

Test-NetConnection 10.0.0.152 -Port 54322

ただ、ポリシー変更中やサーバ再起動中は、継続的に見たいことがあります。
そのため、今回は数秒おきにループして確認する形にしました。

アプリケーションサーバの稼働確認にも使える

このスクリプトは、FWだけでなくアプリケーションサーバの簡易的な稼働確認にも使えます。

例えば、アプリケーションが 54322 番ポートで待ち受けている場合、
そのサービスが起動していれば Open になり、停止していれば Closed / Timeout になります。

アプリケーションの再起動時にこのスクリプトを流しておくと、

[2026-06-01 10:15:01] 接続成功 (Open)
[2026-06-01 10:15:04] 接続失敗 (Closed / Timeout)
[2026-06-01 10:15:07] 接続失敗 (Closed / Timeout)
[2026-06-01 10:15:10] 接続成功 (Open)

のように、停止していた時間帯をざっくり確認できます。

厳密な監視やログ保存を目的としたものではありませんが、
作業中に横で流しておく確認ツールとしては便利です。

止め方

このスクリプトは while ($true) で無限ループしています。
停止する場合は、PowerShellの画面で以下を押します。

Ctrl + C

注意点

このスクリプトは、あくまでTCPポートに接続できるかどうかを確認するものです。
そのため、接続成功と表示されたからといって、アプリケーションが正常に処理できているとは限りません。
例えばHTTPサーバであれば、TCP接続はできても、アプリケーション側で500エラーを返している可能性があります。
また、DBサーバであれば、ポートは開いていても認証エラーや内部エラーが発生している可能性があります。

なので、このスクリプトで確認できるのは、対象IPの対象ポートにTCP接続できるかというところまでです。

アプリケーションレベルの正常性まで確認したい場合は、HTTPのステータスコード確認や、実際のAPI疎通確認などを別途行う必要があります。

まとめ

今回は、PowerShellで簡単なポート監視スクリプトを作りました。

FWのポリシーテストや、アプリケーションサーバの待受確認をするだけであれば、これくらいのスクリプトでも十分役に立ちました。

特に、設定変更作業中に数秒おきに接続状況を見たい場合には便利です。

本格的な監視システムを入れるほどではないけれど、
一時的にポートの状態を追いかけたい、という場面では今後も使えそうです。

-Powershell, Windows11, パソコン関連, 自宅サーバ
-, , ,