如何在Windows命令列中取得特定路由的網關?

如何在Windows命令列中取得特定路由的網關?

有沒有辦法在Windows(本例為Win7)中列印出特定路由(不是介面)的網關?我需要在 OpenVPN _up 腳本中動態新增路由,但由於網關是在連接形成時動態分配的,因此我無法靜態編寫腳本。

似乎還有一些環境變數(route_vpn_gateway?)可用於 _up 腳本,但我還沒有設法讓它們運作。

我想我可以使用 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)迭代字串數組,直到找到要替換的字串,然後替換該字串並保存檔案。

希望這能為您指引正確的方向。

相關內容