Test-NetConnection命令TCP测试成功时是否执行ICMP测试的疑问
Test-NetConnection 命令ICMP测试触发逻辑解析
已知行为总结
- 当
TcpTestSucceeded为false时,命令必然执行ICMP Ping测试,返回PingSucceeded和PingReplyDetails字段——这是设计上为了在TCP连接失败时,辅助排查基础网络连通性问题。 - 当
TcpTestSucceeded为true时,ICMP测试是否执行,取决于以下几个核心因素:
TCP测试成功时触发ICMP测试的场景
PowerShell版本差异
- 旧版PowerShell(如5.1及更早):指定
-port参数且TCP测试成功时,默认会同时执行ICMP Ping测试,返回完整的连通性结果。 - 新版PowerShell(7.x系列):做了效率优化,仅当显式添加
-InformationLevel Detailed参数时,才会在TCP测试成功后执行Ping测试并返回相关字段;未指定该参数时,默认只输出TCP测试核心信息,跳过Ping步骤。
- 旧版PowerShell(如5.1及更早):指定
系统网络权限与目标配置
- 若执行命令的设备被防火墙规则禁止发送ICMP Echo请求(Ping),即便TCP测试成功,也无法执行Ping测试,自然不会返回相关字段。
- 目标主机若拦截ICMP Echo请求(比如防火墙拒绝),命令会尝试执行Ping但返回
PingSucceeded为false——这属于测试失败,而非跳过测试。
命令参数组合
- 只要同时使用
-port和-InformationLevel Detailed参数,无论TCP测试是否成功,都会强制执行ICMP Ping测试并返回完整结果。 - 仅用
-port参数未指定信息级别时,新版PowerShell默认精简输出,跳过Ping测试以提升速度。
- 只要同时使用
验证示例(PowerShell 7.x环境)
精简输出(无Ping测试):
Test-NetConnection www.google.com -port 443仅返回
ComputerName、RemoteAddress、RemotePort、TcpTestSucceeded等核心字段。完整输出(含Ping测试):
Test-NetConnection www.google.com -port 443 -InformationLevel Detailed返回结果包含
PingSucceeded、PingReplyDetails(RTT)等Ping相关字段。
内容的提问来源于stack exchange,提问作者S. Walker
相关产品推荐
相关产品推荐

