Test-NetConnection 能做什么
Test-NetConnection 是 PowerShell 内置的探测命令(别名 tnc),一条命令同时给出解析结果、ICMP 可达性与指定 TCP 端口的连通性,完整替代了 telnet 手工测端口的老做法。加 -TraceRoute 还能顺带给出路径,加 -InformationLevel Detailed 输出更详细的字段。输出是对象而不是文本,脚本里可以直接判断属性,比解析控制台输出可靠得多。
基本信息
| 适用平台 | Windows 8 / Server 2012 及以上(NetTCPIP 模块) |
|---|---|
| 别名 | tnc |
| 关键参数 | -Port 指定端口、-InformationLevel Detailed、-TraceRoute、-ComputerName |
| 判读重点 | 以 TcpTestSucceeded 为端口连通结论,PingSucceeded 只代表 ICMP |
| 权限要求 | 普通用户即可;-TraceRoute 部分网络环境可能受限 |
典型使用场景
- 验证数据库或中间件端口是否可达:替代 telnet 且自动带超时
- 区分 ICMP 与 TCP 策略:确认是整机不可达还是仅端口被拦
- 排查 DNS:ComputerName 传域名时同时体现解析结果
- 收集路径信息:一次命令拿到到目标的跳数与路由
- 脚本化巡检:用对象属性判断结果,便于批量输出报表
用法
用法
Test-NetConnection 10.0.0.5 -Port 3306 # 测 MySQL 端口
Test-NetConnection example.com -Port 443 -InformationLevel Detailed # 详细输出
tnc 10.0.0.5 -Port 3306 | Select-Object ComputerName, RemoteAddress, TcpTestSucceeded, PingSucceeded
Test-NetConnection 10.0.0.5 -TraceRoute # 顺带输出到目标的路径
# 批量巡检并只保留结论列
'10.0.0.5:3306','10.0.0.6:6379' | ForEach-Object {
$h,$p = $_ -split ':'
$r = Test-NetConnection $h -Port $p -WarningAction SilentlyContinue
[pscustomobject]@{ Target=$_; Tcp=$r.TcpTestSucceeded }
}输出字段判读
| 字段 | 含义 | 判读要点 |
|---|---|---|
| ComputerName | 目标主机名或 IP | 传域名时同时验证了解析是否成功 |
| RemoteAddress | 解析出的目标地址 | 解析异常时这里会显示错误或为空 |
| PingSucceeded | ICMP 是否回应 | False 不代表端口不通,ICMP 常被单独拦截 |
| TcpTestSucceeded | TCP 端口是否可连 | 端口连通性的权威结论看这一项 |
| PingReplyDetails | RTT 明细 | 用于粗判时延,精度低于专业工具 |
| TraceRoute | 路径跳数列表 | 部分网络禁用 ICMP 时结果可能不完整 |
PingSucceeded=False 且 TcpTestSucceeded=True 是很常见的组合:说明主机与端口都正常,只是 ICMP 被策略单独拦截了,结论要看 TCP 那一项。
组合用法:先用 Test-NetConnection 判断端口,再用 Resolve-DnsName 核对解析,两条命令就能把客户端侧的可能性收敛到很小范围。
排查顺序建议:先测端口确认通不通,再测解析确认地址对不对;两项都正常时,问题基本已经不在客户端侧了。