测试主机连通性、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
PingSucceeded 为 False 不等于主机宕机;很多网络禁 ICMP 但业务端口正常,判断服务可用性看 TcpTestSucceeded。-InformationLevel Quiet 返回布尔值而不是对象,脚本里直接判断即可;不要再访问 .TcpTestSucceeded。-Port 一次只能测一个 TCP 端口,不支持范围或逗号列表;多端口用 ForEach-Object 循环。Resolve-DnsName 或 nslookup;缓存问题可 ipconfig /flushdns 后复测。-TraceRoute 依赖 ICMP TTL,路径上的设备可能不回包,显示 * 不代表一定断;耗时也明显更长。Import-Module NetTCPIP,或改用 7.x 的 Test-Connection -TcpPort。ping — 基础 ICMP 连通性测试。tracert — CMD 的路由跟踪。netstat — 查看本机监听端口和连接状态。ipconfig — 检查本机地址、网关和 DNS,必要时刷新缓存。合上页面,先回答,再展开对照。
PingSucceeded 为 False、TcpTestSucceeded 为 True 说明什么?-InformationLevel Quiet 的输出是什么类型?脚本里怎样用?ForEach-Object,逐个调用 Test-NetConnection -Port $_ -InformationLevel Quiet。
小程序版
微信扫码,随时查命令