如何用PowerShell定期检查活跃ISP/路由?含pathping输出提取方案
检查活跃ISP路由的PowerShell解决方案
方法一:直接查询系统路由表(最可靠)
Windows系统的路由表会直接记录当前生效的路由规则,无需依赖外部工具,使用Get-NetRoute cmdlet即可精准获取默认路由(对应出口ISP)的信息。
示例代码
# 获取优先级最高的默认路由(RouteMetric值越小,优先级越高) $activeDefaultRoute = Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object RouteMetric | Select-Object -First 1 # 输出关键信息 Write-Host "当前活跃默认路由详情:" $activeDefaultRoute | Format-Table DestinationPrefix, NextHop, InterfaceAlias, RouteMetric -AutoSize # 根据接口名称判断ISP switch ($activeDefaultRoute.InterfaceAlias) { "以太网" { Write-Host "当前活跃ISP:有线" } "蜂窝网络" { Write-Host "当前活跃ISP:移动数据" } # 可根据你的实际接口名称扩展 default { Write-Host "当前活跃ISP:无法识别(接口名:$($activeDefaultRoute.InterfaceAlias))" } }
方法二:解析pathping输出(适配你原有的工具需求)
如果必须使用pathping,PowerShell可以捕获并解析其输出,提取下一跳IP信息:
示例代码
# 执行pathping(-n禁用DNS解析,-w缩短超时) $pathpingResult = pathping -n -w 100 8.8.8.8 | Select-String "^\s*1\s+" if ($pathpingResult) { # 用正则提取第一跳的IP地址 $nextHopIP = $pathpingResult.Line -replace "^\s*1\s+", "" -replace "\s+.*$", "" Write-Host "当前下一跳IP:$nextHopIP" # 根据预设的网关IP段判断ISP if ($nextHopIP -like "192.168.1.*") { Write-Host "当前活跃ISP:有线" } elseif ($nextHopIP -like "10.0.4.*") { Write-Host "当前活跃ISP:移动数据" } else { Write-Host "当前活跃ISP:无法识别" } } else { Write-Host "pathping无法获取下一跳信息" }
方法三:结合特定测试IP判断ISP
提前准备对应有线/移动ISP的测试IP(比如各自的DNS服务器),通过测试路由下一跳来对比判断:
示例代码
# 定义对应ISP的测试IP(根据你的实际网络配置修改) $wiredGateway = "192.168.1.1" $mobileGateway = "10.0.4.1" # 获取当前生效的默认路由下一跳 $activeGateway = (Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Sort-Object RouteMetric | Select-Object -First 1).NextHop # 判断活跃ISP if ($activeGateway -eq $wiredGateway) { Write-Host "当前活跃ISP:有线" } elseif ($activeGateway -eq $mobileGateway) { Write-Host "当前活跃ISP:移动数据" } else { Write-Host "当前活跃ISP:无法识别(网关IP:$activeGateway)" }
内容的提问来源于stack exchange,提问作者Steffen
相关产品推荐
相关产品推荐

