有没有办法在 Windows(本例中为 Win7)中打印出特定路由(而非接口)的网关?我需要在 OpenVPN _up 脚本中动态添加路由,但由于网关是在建立连接时动态分配的,因此我无法静态地编写脚本。
_up 脚本似乎还可能有一些可用的环境变量(route_vpn_gateway?),但我还没有设法让它们发挥作用。
我想我可以使用 GnuWin 工具中的 awk/grep 并解析“路线”输出,但也许有更干净/更简单的方法?
答案1
您可以轻松使用电源外壳:
PS C:\Users\mmoor> $RouteTable = Get-WmiObject Win32_IP4RouteTable
PS C:\Users\mmoor> $RouteTable[0].Mask
0.0.0.0
PS C:\Users\mmoor> $RouteTable[0].Destination
0.0.0.0
PS C:\Users\mmoor> $RouteTable[0].NextHop
<Gateway Address>
将其与从 Windows 命令行运行 ROUTE PRINT 进行比较。Powershell 是一种详细的脚本语言,因此您可以轻松更新 openvpn 客户端配置脚本,我假设这就是您要做的。它也是基于面向对象的。
我会做如下的事情:
1)从 wmi 获取路由表(如上所示)
2)每个路由表条目都是数组中的一个条目(因此上面的变量后面有 [0])
3)对数组进行 foreach 操作,直到找到所需的 IP 地址
4)从RouteTable条目中获取NextHop成员并存储
5)读取 OpenVPN 客户端配置文件(在 powershell 中使用 get-content 将创建该文件的字符串数组)
6)遍历字符串数组,直到找到要替换的字符串,然后替换该字符串并保存文件。
希望这能为您指明正确的方向。