PowerShell批量检查Windows网络状态的核心是组合Test-Connection、Get-NetIPAddress、Get-NetAdapter和Test-NetConnection等cmdlet,实现连通性、IP配置、网卡状态及端口可达性自动化检测。
用 powershell 批量检查 windows 网络状态,核心是结合 test-connection、get-netipaddress、get-netadapter 和 test-netconnection 等 cmdlet,通过脚本自动化收集多台设备的连通性、ip 配置、网卡状态及端口可达性信息。
批量连通性检测(Ping)
对一组目标主机执行 ping 测试,快速识别离线设备。推荐使用 Test-Connection 并禁用 ICMP 缓存以提升准确性:
- 从文本文件读取 IP 或主机名列表(每行一个),例如
servers.txt - 使用
-Count 1 -Quiet提高效率,返回布尔值便于筛选 - 添加
-ErrorAction SilentlyContinue避免因权限或防火墙导致的报错中断 - 示例命令:
Get-Content servers.txt | ForEach-Object { [PSCustomObject]@{Target=$_; Online=(Test-Connection $_ -Count 1 -Quiet -ErrorAction SilentlyContinue)} } | Export-Csv ping_report.csv -NoTypeInformation
本地网络配置批量采集
在本机或远程多台 Windows 设备上统一获取 IP 地址、子网掩码、默认网关和 DNS 设置:
- 用
Get-NetIPAddress -AddressFamily IPv4 -AddressState Preferred获取活动 IPv4 地址 - 配合
Get-NetIPConfiguration提取网关、DNS、接口索引等上下文信息 - 对远程主机需启用 WinRM 并使用
Invoke-Command,例如:Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { Get-NetIPConfiguration | Select-Object InterfaceAlias, IPv4Address, IPv4DefaultGateway, NetIPv4DnsServer } - 结果可导出为 CSV 或 JSON,便于比对配置一致性
端口与服务连通性验证
仅 ping 通不代表服务可用,需进一步测试关键端口(如 RDP 3389、HTTP 80、WinRM 5985):
- 使用
Test-NetConnection的-Port参数,支持超时控制(-TimeoutMsec) - 可组合目标列表与端口列表,生成矩阵式检测结果
- 注意:远程执行需目标开启 WinRM 或防火墙放行对应端口;本地脚本中建议加
if ($_.TcpTestSucceeded)判断 - 示例片段:
Test-NetConnection 192.168.1.10 -Port 3389 -TimeoutMsec 1000 | Select-Object ComputerName, RemoteAddress, Port, TcpTestSucceeded
网卡状态与驱动健康检查
识别物理/虚拟网卡是否启用、连接状态异常、驱动版本过旧或存在警告:
-
Get-NetAdapter | Where-Object {$_.Status -ne 'Up'}快速定位断开的适配器 -
Get-NetAdapterBinding -ComponentID ms_tcpip | Where-Object {$_.Enabled -eq $false}检查 TCP/IP 协议是否启用 - 结合
Get-PnpDevice -Class Net -Status OK查看驱动状态,排除“Unknown”或“Error”设备 - 对批量主机,仍可通过
Invoke-Command封装上述逻辑,统一输出异常项摘要


















