Test-NetConnection 是什么
Test-NetConnection(别名 tnc)是 PowerShell 里的综合连通性测试命令,把过去要分几步做的事合并到一条命令里:解析目标名称、发送 ICMP 探测、对指定端口做 TCP 握手、在详细模式下还给出选路与所用网卡。它的价值在于把「能否到达」和「端口能否连上」两个判断放在一次输出里,减少反复切换工具的麻烦。返回结果是对象而不是文本,判断字段就能直接驱动脚本分支,这一点比 ping 与手动端口测试更适合自动化。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上(在 Windows 上运行) |
|---|---|
| 语法 | Test-NetConnection [[-ComputerName] <目标>] [-Port <端口>] [-InformationLevel Quiet|Detailed] [-CommonTCPPort <名称>] |
| 别名 | tnc |
| 返回类型 | PSCustomObject,含 PingSucceeded、TcpTestSucceeded 等布尔字段 |
| 默认行为 | 不指定端口时默认对 80 端口做 TCP 测试并附带 ICMP 探测 |
| 权限 | 普通用户即可;读取详细路由信息在部分受限环境可能受限 |
典型使用场景
- 确认目标主机在线并顺带验证常用端口是否开放
- 排查「服务连不上」:区分是主机不可达还是端口未监听
- 自动化脚本前置检查:把端口探测结果作为分支条件决定后续动作
- 验证 DNS 解析结果是否与预期地址一致
- 多网卡机器上确认出站流量走了哪张网卡、经过哪个网关
- 用详细模式获取路由信息,辅助判断是否误走了 VPN 或代理
常用示例
常用示例
# 基础连通性:ICMP 加默认 80 端口测试
Test-NetConnection 10.0.0.8
# 指定端口测试,这是最常用的形式
Test-NetConnection db01 -Port 5432
# 别名写法,交互时更省事
tnc web01 -Port 445
# 详细模式:带路由与所用网卡信息
Test-NetConnection 10.0.0.8 -InformationLevel Detailed
# 自动化判断:只关心布尔结果
if ((Test-NetConnection web01 -Port 443).TcpTestSucceeded) { '服务可达' } else { '端口不通' }
# 本机自测:验证服务是否在本机监听
Test-NetConnection 127.0.0.1 -Port 8080参数与返回字段
| 项 | 含义 | 怎么用 |
|---|---|---|
| -ComputerName | 目标主机名或 IP 地址 | 可省略,省略时结合端口做本机自测 |
| -Port | 要测试的 TCP 端口 | 不指定时默认探测 80 端口 |
| -InformationLevel | 输出详细程度,Quiet 只给布尔,Detailed 附路由与网卡 | 自动化里用 Quiet 便于判断 |
| PingSucceeded | ICMP 是否收到应答 | 为假不一定不可达,ICMP 常被策略屏蔽 |
| TcpTestSucceeded | TCP 握手是否成功 | 服务可达性的关键依据 |
| RemoteAddress | 解析出的目标地址 | 用于核对解析结果是否符合预期 |
| InterfaceAlias | 本机出站使用的网卡 | 多网卡环境判断流量从哪张卡出去 |
| Route | 详细模式下的选路信息 | 确认是否走了 VPN 或异常网关 |
结果组合判读
| ICMP | TCP 端口 | 结论 |
|---|---|---|
| 通 | 通 | 主机与服务都可达,问题多半在应用层 |
| 通 | 不通 | 主机在线,但端口未监听或被防火墙拦截 |
| 不通 | 通 | 主机屏蔽 ICMP,但服务正常,属常见现象 |
| 不通 | 不通 | 主机可能下线、网络不可达或全量被拦,需分段定位 |
判断服务是否可达要看 TcpTestSucceeded,而不是看 PingSucceeded:云平台与安全加固后的主机普遍屏蔽 ICMP,只凭 ICMP 结果会把正常服务误判成故障。
本机自测与远程测试结果不一致时,优先怀疑监听地址:服务只绑在环回地址上,本地能连、远程连不上;只绑在指定网卡上,换一张网卡也不通。
端口探测的两种失败表现要分开看:立即返回连接被拒绝,说明对端有应答但端口没在监听;一直等到超时,多半是路径上的防火墙把包丢了。前者查服务列表,后者查策略与路由。