PowerShell では、テストネット接続コマンドレットを使用して、リモート コンピューター上でポートが使用可能 (開いている) かどうかを確認します。このコマンドレットを使用すると、リモート サーバーまたはネットワーク サービスの応答と可用性を確認したり、TCP ポートがファイアウォールによってブロックされているかどうかをテストしたり、ICMP の可用性とルーティングを確認したりできます。実際には、Test-NetConnectionなどのいくつかの一般的なネットワーク管理ツールを置き換えます。ping,tracert,telnet,pathping、TCP ポート スキャナーなど。
コンテンツ:
- Test-NetConnection で開いている TCP ポートを確認する
- PowerShell: 複数のホストで開いているポートを確認する
- PowerShell のシンプルな TCP/IP ポート スキャナー
- PowerShell を使用して Windows で開いているポートを一覧表示する方法
Test-NetConnection で開いている TCP ポートを確認する
Test-NetConnection コマンドレットを使用して、TCP ポートのみを確認できます。たとえば、リモート メール サーバーで TCP ポート 25 (SMTP プロトコル) が開いているかどうかを確認するには、次のようにします。
Test-NetConnection -ComputerName ny-msg01 -Port 25
注記。 Test-NetConnection コマンドレットを使用してテストできるのは、TCP ポート接続のみです。ただし、コマンドレットを使用してリモート UDP ポートの可用性を確認することはできません。
Test-NetConnection コマンドには次のエイリアスがあります。TNC。同じコマンドの短縮版は次のようになります。
TNC ny-msg01 -Port 25

コマンドの結果を見てみましょう。
ComputerName : ny-msg01 RemoteAddress : 10.20.1.7 RemotePort : 25 InterfaceAlias : CORP SourceAddress : 10.20.1.79 PingSucceeded : True PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : True
ご覧のとおり、コマンドレットはサーバー名を IP アドレスに解決し、ICMP 応答をチェックします (次のようなもの)。ping)、TCP ポートからの応答 (ポートの可用性) を確認します。指定されたサーバーは ICMP 経由で応答します (PingSucceeded = True)、TCP ポート 25 が開いています (RemotePort=25, TcpTestSucceeded= True).
注記。コマンドが PingSucceeded=False および TcpTestSucceeded=True を返した場合、これはおそらく ICMP エコー要求 (ping) がリモート コンピューターで無効になっていることを意味します。
を実行すると、パラメーターなしの Test-NetConnection、コンピュータがインターネットに接続されているかどうかを確認します (インターネットが利用可能かどうかを確認します)。internetbeacon.msedge.netホスト)。


–を追加できます情報レベルの詳細リモート TCP ポートをチェックするときに詳細情報を表示するオプション:
TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed


コマンドレットには特別なパラメータがあります。共通TCPポートを使用すると、既知のネットワーク プロトコル (HTTP、RDP、SMB、WINRM) の名前を指定できます。
たとえば、HTTP Web サーバーの可用性を確認するには、次のコマンドを使用できます。
Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP
または、デフォルトの RDP ポート (TCP/3389) が利用可能かどうかを確認します。
Test-NetConnection ny-rds1 –CommonTCPPort RDP
Test-NetConnection コマンドレットが返すすべてのパラメーターを一覧表示できます。
Test-NetConnection ny-man01 -port 445|Format-List *


ポートが利用可能かどうかだけを確認する必要がある場合は、より迅速に確認できます。
TNC ny-msg1 -Port 25 -InformationLevel Quiet
コマンドレットが返されますTrueこれは、リモート TCP ポートが開いていることを意味します。
![]()
![]()
ヒント.Windows PowerShell の以前のバージョン (バージョン 4.0 より前) では、次のコマンドを使用してリモート TCP ポートの可用性を確認できました。
(New-Object System.Net.Sockets.TcpClient).Connect('ny-msg01', 25)


Test-NetConnection コマンドレットを使用すると、次のようにしてリモート サーバーへのルートをトレースできます。トレースルートパラメータ(組み込みのパラメータと同様)tracertWindows のコマンド)。ルート チェック中の最大ホップ数を制限するには、-ホップパラメータ。
Test-NetConnection ny-man01 –TraceRoute
コマンドレットは、ネットワーク アクセス遅延の概要をミリ秒単位で返しました (PingReplyDetails (RTT): 41 ms) と、宛先ホストに到達する途中のルーターのすべての IP アドレス。


PowerShell を使用して、多数のリモート コンピューター上の特定のポートが利用可能かどうかを確認できます。ホスト名または IP アドレスのリストを次の名前でプレーン テキスト ファイルに保存します。servers.txt.
たとえば、あなたのタスクは、TCP/25 ポートが応答していないか、サーバーのリストで閉じられているホストを見つけることです。
Get-Content c:PSlist_servers.txt | where { -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)}| Format-Table -AutoSize
リモート サーバーの可用性をチェックし、使用できないサーバーがある場合はポップアップ通知を表示する、簡単な監視 PowerShell スクリプトを使用できます。
たとえば、AD の健全性チェック中に、すべてのドメイン コントローラー上の基本サービスの可用性を確認できます (DC リストは Get-ADDomainController コマンドレットで取得できます)。 DC 上の次のサービスを確認してみましょう (PortQry ツールにも同様の「ドメインと信頼」ルールがあります)。
- RPC – TCP/135
- LDAP – TCP/389
- LDAP – TCP/3268
- DNS – TCP/53
- ケルベロス – TCP/88
- SMB – TCP/445
$Ports = "135","389","636","3268","53","88","445","3269", "80", "443"
$AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address
ForEach($DC in $AllDCs){
Foreach ($P in $Ports){
$check=Test-NetConnection $DC.Ipv4address -Port $P -WarningAction SilentlyContinue
If ($check.tcpTestSucceeded -eq $true)
{Write-Host $DC.hostname $P -ForegroundColor Green -Separator " => "}
else
{Write-Host $DC.hostname $P -Separator " => " -ForegroundColor Red}
}
}
このスクリプトは、ドメイン コントローラー上の指定された TCP ポートをチェックし、使用できないポートがある場合は、そのポートを赤色で強調表示します (この PowerShell スクリプトは Windows サービスとして実行できます)。


PowerShell のシンプルな TCP/IP ポート スキャナー
PowerShell を使用して、リモート ホストまたは IP サブネットをスキャンして開いている/閉じている TCP ポートを確認する単純な IP スキャナーを実装できます。
192.168.1.100 ~ 192.168.1.150 の範囲の IP アドレスをスキャンし、ポート 3389 が開いているコンピュータを表示するには、次の手順を実行します。
foreach ($ip in 100..150) {Test-NetConnection -Port 3389 -InformationLevel "Detailed" 192.168.1.$ip}
リモート ホスト上の TCP ポートの範囲 (1 ~ 1024) をスキャンします。
foreach ($port in 1..1024) {If (($a=Test-NetConnection srvfs01 -Port $port -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true){ "TCP port $port is open!"}}


PowerShell を使用して Windows で開いているポートを一覧表示する方法
を使用します。Get-NetTCPConnectionローカル コンピューターで開いているポートを一覧表示するコマンドレット (これは、PowerShell でのコマンドレットに相当します)NETSTAT)。コンピューター上で開いているすべての TCP ポートのリストは、次のようにして表示できます。
もっと詳しく知る:Windows ファイアウォールでポートを開いたりブロックしたりする方法
Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort| Sort-Object -Property LocalPort | Format-Table


Get-NetTCPConnection コマンドレットを使用して、アクティブな TCP/IP 接続を一覧表示することもできます。
コンピュータ上の特定のポートでリッスンしているプログラム (プロセス) を調べたい場合は、次のコマンドを使用します (443 は確認したいポート番号です)。
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | ft Id, ProcessName, UserName, Path














