PowerShell中可用Test-NetConnection检测端口连通性,支持单端口测试、详细诊断、批量扫描;也可用Telnet或.NET Socket类实现替代方案。

如果您需要验证本地计算机与远程服务器之间的特定端口是否可达,PowerShell 提供了内置命令 Test-NetConnection,可直接检测 TCP 端口连通性及网络路径状态。以下是多种可行的操作方法:
一、使用 Test-NetConnection 基础语法检测单个端口
Test-NetConnection 是 Windows 8.1 及 Windows Server 2012 R2 以后版本内置的网络诊断 cmdlet,无需额外安装,支持 -Port 参数进行端口级连通性验证,同时返回目标主机响应、TCP 连接结果及路由信息。
1、以管理员身份打开 PowerShell(非必需,但建议用于获取完整诊断信息)。
2、输入命令:Test-NetConnection -ComputerName example.com -Port 443,将 example.com 替换为目标主机名或 IP 地址,443 替换为待测端口号。
3、观察输出中的 TcpTestSucceeded 字段值:若为 True,则表示端口开放且连接成功;若为 False,则端口不可达或被拦截。
二、启用详细诊断并保存结果到变量
通过将命令结果赋值给变量,可进一步提取关键字段进行判断或日志记录,避免依赖屏幕输出解读,提升脚本可靠性。
1、执行命令:$result = Test-NetConnection -ComputerName 192.168.1.100 -Port 22 -InformationLevel Detailed,其中 -InformationLevel Detailed 可显示 ICMP 测试、DNS 解析、路由跃点等扩展信息。
2、检查连接状态:$result.TcpTestSucceeded。
3、查看 DNS 解析结果:$result.DnsLookupResolution,确认目标主机名是否正确解析为 IPv4/IPv6 地址。
三、批量检测多个端口并输出简洁结果
当需对同一目标测试多个端口(如常见服务端口 21、22、80、443、3389)时,可通过管道与 ForEach-Object 实现循环调用,避免重复输入命令。
1、运行以下语句:@(21,22,80,443,3389) | ForEach-Object { $r = Test-NetConnection -ComputerName www.example.org -Port $_ -WarningAction SilentlyContinue; [PSCustomObject]@{Port=$_; Status=$r.TcpTestSucceeded} }。
2、每行输出包含端口号与对应 TcpTestSucceeded 布尔值,便于快速识别开放端口。
3、如需导出为 CSV 文件,可在末尾追加 | Export-Csv -Path "port_scan_result.csv" -NoTypeInformation。
四、绕过防火墙限制使用 Telnet 替代方案
在部分受限环境(如禁用 Test-NetConnection 或 PowerShell 执行策略严格)中,可启用系统内置 Telnet 客户端作为轻量级替代工具,通过连接行为判断端口状态。
1、启用 Telnet 客户端功能:dism /online /Enable-Feature /FeatureName:TelnetClient(需管理员权限)。
2、执行连接测试:telnet 10.0.0.5 3389,若窗口变为空白或显示转义字符,说明连接成功;若提示“无法打开到主机的连接”,则端口不通或被拒绝。
3、退出 Telnet 会话:Ctrl + ] 后输入 quit 回车。
五、使用 .NET Socket 类实现无依赖端口探测
适用于 PowerShell 执行受限但 .NET Framework 可用的场景,通过新建 TcpClient 实例尝试建立连接,不依赖任何外部命令或功能启用。
1、输入以下代码块:$tcp = New-Object System.Net.Sockets.TcpClient; $tcp.Connect("api.github.com", 443); $tcp.Connected。
2、若返回 True,表示连接成功;若抛出异常(如超时或拒绝),则端口不可达。
3、为避免脚本中断,可包裹 try/catch:try { $tcp.Connect("127.0.0.1", 8080); "Open" } catch { "Closed or filtered" }。










