ネットワークの疎通確認をしたいけどpingだとポート番号まで確認できなくて困ったことってありますよね。特にWebサーバーやデータベースへの接続確認ではIPアドレスだけでなくポート番号も含めて「本当に通信できるのか」を確認したい場面が多いと思います。
さらに最近のWindows環境ではファイアウォールがデフォルトでpingの受信を遮断する設定になっているため「pingが通らない=通信できない」とは限らないという難しさもありますよね。
今回はPowerShellを使ってホスト名(またはIPアドレス)とポート番号をセットで疎通確認する方法を解説します。環境に応じて2つのコマンドを使い分けることでより正確なネットワーク診断ができるようになりますよ。
pingコマンドの限界とポート指定確認の必要性
pingではポート番号を確認できない
pingコマンドは便利なネットワーク診断ツールですが、ICMPプロトコルを使用しているためTCP/UDPのポート番号を指定した確認はできません。
例えば以下のようなシーンでは困りますよね。
- Webサーバー(ポート80や443)が動いているか確認したい。
- データベース(ポート3306や5432)への接続を確認したい。
- 特定のアプリケーションポートが開いているか調べたい。
Windowsファイアウォールとpingの関係
また、Windows 10以降のOSではセキュリティ強化のためファイアウォールがデフォルトでICMPエコー要求(ping)をブロックします。このためpingが失敗した原因が「ネットワークが不通」なのか「ファイアウォールで遮断されている」のか判断できないこともあります。
PowerShellのポート指定確認コマンドを使えば、TCP接続を直接試すことでより実用的な疎通確認ができるようになります。
PowerShellでポート疎通を確認する2つの方法
PowerShellにはポート番号を指定して疎通確認できるコマンドが2種類用意されています。それぞれに特徴があるので用途に応じて使い分けましょう。
| コマンド名 | 必要なバージョン | 実行速度 | 出力情報 | おすすめシーン |
|---|---|---|---|---|
| Test-Connection | PowerShell 7.0以上 | 高速 | True/False | シンプルな確認、スクリプト組み込み |
| Test-NetConnection | PowerShell 5.1以上 | やや遅い | 詳細情報 | トラブルシューティング、詳細調査 |
Test-Connectionコマンドの使い方【高速・シンプル】
基本的な構文
PowerShell 7.0以上が使用可能な環境ではTest-Connectionコマンドが最もシンプルで高速です。実行結果はTrue(疎通可能)またはFalse(疎通不可)で返ってきます。
公式ドキュメントによると以下のような構文となっています。
Test-Connection > TcpPort
参考:Microsoft Learn – Test-ConnectionTest-Connection [-TargetName] <string[]> -TcpPort <int> [-IPv4] [-IPv6] [-ResolveDestination] [-Source <string>] [-Count <int>] [-Delay <int>] [-Repeat] [-Quiet] [-TimeoutSeconds <int>] [-Detailed] [<CommonParameters>]
実行例:疎通OKの場合
ローカルホスト(127.0.0.1)のポート8080番に対して疎通確認を行う例です。
PS > Test-Connection 127.0.0.1 -TcpPort 8080
True
この結果は、ポート8080で何らかのサービスが待ち受けておりTCP接続が確立できることを意味します。
実行例:疎通NGの場合
存在しないポート番号(12345番)に対して確認を行った場合です。
PS > Test-Connection 127.0.0.1 -TcpPort 12345
False
Falseが返ってきた場合、以下のいずれかの可能性があります。
- 指定したポートでサービスが起動していない。
- ファイアウォールでポートがブロックされている。
- ネットワーク的に到達できない。
外部サーバーへの接続確認例
実際の業務では外部のWebサーバーやAPIサーバーへの疎通確認も行いますよね。以下はGoogle(8.8.8.8)の53番ポート(DNS)への接続確認例です。
PS > Test-Connection 8.8.8.8 -TcpPort 53
True
スクリプトでの活用例
Test-Connectionは戻り値がTrue/Falseなので、PowerShellスクリプト内での条件分岐に使いやすいという利点もあります。
$result = Test-Connection example.com -TcpPort 443
if ($result) {
Write-Host "HTTPS接続OK"
} else {
Write-Host "HTTPS接続NG"
}
Test-NetConnectionコマンドの使い方【詳細情報取得】
基本的な構文
PowerShell 5.1以上(Windows 10標準搭載)で使用可能なTest-NetConnectionはTest-Connectionより詳細な情報を取得できます。ただし実行に若干時間がかかる点には注意が必要です。
公式ドキュメントによると以下のような構文となっています。
Test-NetConnection > RemotePort
参考:Microsoft Learn – Test-NetConnectionTest-NetConnection [[-ComputerName] <String>] -Port <Int32> [-InformationLevel <String>] [<CommonParameters>]
実行例:疎通OKの場合
ローカルホストのポート8080番に対して確認を行った例です。
PS > Test-NetConnection 127.0.0.1 -Port 8080
ComputerName : 127.0.0.1
RemoteAddress : 127.0.0.1
RemotePort : 8080
InterfaceAlias : Loopback Pseudo-Interface 1
SourceAddress : 127.0.0.1
TcpTestSucceeded : True
Test-Connectionと異なり以下の詳細情報が取得できます。
- RemoteAddress: 接続先のIPアドレス。
- RemotePort: 接続先のポート番号。
- InterfaceAlias: 使用されたネットワークインターフェース名。
- SourceAddress: 接続元のIPアドレス。
- TcpTestSucceeded: TCP接続が成功したかどうか(True/False)。
実行例:疎通NGの場合
存在しないポート番号への接続を試みた場合です。
PS > Test-NetConnection 127.0.0.1 -Port 12345
WARNING: TCP connect to (127.0.0.1 : 12345) failed
ComputerName : 127.0.0.1
RemoteAddress : 127.0.0.1
RemotePort : 12345
InterfaceAlias : Loopback Pseudo-Interface 1
SourceAddress : 127.0.0.1
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : False
注目すべきはPingSucceeded : Trueの部分です。これは「pingは通るけど指定したポートへのTCP接続は失敗した」ことを示しています。この情報があることで、ネットワーク自体は到達可能だがサービスが起動していない(またはファイアウォールでブロックされている)と判断できるわけですね。
トラブルシューティングでの活用
Test-NetConnectionはネットワークトラブルの切り分けに非常に役立ちます。
PS > Test-NetConnection db-server.example.com -Port 3306
例えば上記のコマンドでデータベースサーバーのMySQLポート(3306)への接続を確認し、PingSucceededとTcpTestSucceededの組み合わせから原因を特定できます。
2つのコマンドの使い分けガイド
どちらのコマンドを使うべきか迷ったときの判断基準をまとめました。
Test-Connectionを使うべきケース
- PowerShell 7.0以上が利用可能な環境。
- 単純に「接続できるかどうか」だけを高速に確認したい。
- スクリプト内で条件分岐に使いたい。
- 複数のホスト・ポートを連続で確認したい。
Test-NetConnectionを使うべきケース
- PowerShell 5.1環境(Windows標準)で実行したい。
- 詳細なネットワーク情報も同時に取得したい。
- トラブルシューティングで原因を切り分けたい。
- pingの疎通状況も併せて確認したい。
よくある質問(Q&A)
- QPowerShellのバージョンはどうやって確認できますか?
- A
以下のコマンドで確認できます。
PowerShellPS > $PSVersionTable.PSVersion出力されたメジャーバージョンが7以上ならTest-Connectionの-TcpPortオプションが使用可能です。
以下でも簡単に解説してます。
PowerShell最新版へ更新する方法【7.x対応】
- Qホスト名でも指定できますか?
- A
はい、IPアドレスの代わりにホスト名(FQDN)も指定可能です。
PowerShellPS > Test-Connection example.com -TcpPort 443 PS > Test-NetConnection example.com -Port 443
- Q複数のポートを一度に確認できますか?
- A
Test-Connectionでは配列を使って複数確認できます。
PowerShellPS > 80,443 | ForEach-Object { Test-Connection example.com -TcpPort $_ }
- Qタイムアウト時間を変更できますか?
- A
Test-Connectionでは-TimeoutSecondsオプションで指定できます。
PowerShellPS > Test-Connection example.com -TcpPort 443 -TimeoutSeconds 5Test-NetConnectionはデフォルトで数秒のタイムアウトが設定されています。
- QUDPポートの確認はできますか?
- A
残念ながら両コマンドともTCP接続のみの確認となります。UDPポートの確認には別のツール(Test-NetConnectionの-TraceRouteオプションや専用ツール)が必要です
まとめ
PowerShellでポート番号を指定した疎通確認を行う方法について解説しました。
- pingコマンドではポート番号を指定した確認ができないよ。
- Test-Connection(PowerShell 7.0以上)は高速でシンプル、戻り値がTrue/Falseだよ。
- Test-NetConnection(PowerShell 5.1以上)は詳細情報が取得できて、トラブルシューティングに最適だよ。


