系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

Test-NetConnection

测试主机连通性、TCP 端口和路由,替代 ping/telnet。

补充说明

Test-NetConnection 属于 NetTCPIP 模块,默认输出 NetConnectionTestResult 对象,包含 ComputerName、RemoteAddress、PingSucceeded、TcpTestSucceeded、InterfaceAlias、SourceAddress 等字段;别名是 tnc。-Port 测单个 TCP 端口,-CommonTCPPort 可选 HTTP、RDP、SMB、WINRM,-InformationLevel Quiet 只返回布尔值,-TraceRoute 配合 -Hops 输出路径。

管道:它不以对象管道为主要输入,主机名直接传给 -ComputerName;批量测试用 ForEach-Object 逐个调用,结果对象可继续 Select-Object/Export-Csv。权限:无需管理员,但受 DNS、路由、代理和防火墙策略影响;ICMP 被禁不代表 TCP 端口不通,两个结果要分开看。

版本:Windows 8 / Windows Server 2012 起随 NetTCPIP 提供,5.1 自带,仅 Windows 可用;7.x 在 Windows 上仍通过该模块调用,非 Windows 平台没有此命令。7.x 差异:可用 Test-Connection -TcpPort 做跨平台 TCP 测试。

常用示例

# 1. 测试 HTTPS 端口,同时查看解析到的地址
PS C:\> Test-NetConnection -ComputerName learn.microsoft.com -Port 443

# 2. 只取布尔结果,适合脚本判断
PS C:\> Test-NetConnection -ComputerName fileserver01 -Port 445 -InformationLevel Quiet

# 3. 用预定义端口测试远程桌面
PS C:\> Test-NetConnection -ComputerName 10.0.0.10 -CommonTCPPort RDP

# 4. 跟踪到目标的路径,限制最大跳数避免长时间等待
PS C:\> Test-NetConnection -ComputerName example.com -TraceRoute -Hops 8

# 5. 批量测试多个端口,输出自定义结果表
PS C:\> '443','80','3389' | ForEach-Object { [pscustomobject]@{ Port=$_; Open=(Test-NetConnection -ComputerName server01 -Port $_ -InformationLevel Quiet) } }

# 6. 只保留关键字段,便于记录和对比
PS C:\> Test-NetConnection -ComputerName server01 -Port 443 | Select-Object ComputerName, RemoteAddress, PingSucceeded, TcpTestSucceeded

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. PingSucceeded 为 False、TcpTestSucceeded 为 True 说明什么?
  2. -InformationLevel Quiet 的输出是什么类型?脚本里怎样用?
  3. 一次测试多个 TCP 端口应该怎样写?
答案
  1. 目标禁用了 ICMP 或 ICMP 被中间设备拦截,但指定 TCP 端口可达,服务本身可能是正常的。
  2. 返回布尔值;直接作为条件判断,不要访问对象属性。
  3. 用端口列表接 ForEach-Object,逐个调用 Test-NetConnection -Port $_ -InformationLevel Quiet。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令