Как получить шлюз для определенного маршрута в командной строке Windows?

Как получить шлюз для определенного маршрута в командной строке Windows?

Есть ли способ вывести шлюз для определенного маршрута (не интерфейса) в Windows (в данном случае Win7)? Мне нужно будет динамически добавить маршрут в скрипт OpenVPN _up, но поскольку шлюз назначается динамически при формировании соединения, я не могу написать его статически.

Похоже, что для скриптов _up потенциально доступны некоторые переменные среды (route_vpn_gateway?), но мне не удалось заставить их работать.

Полагаю, я воспользуюсь awk/grep из инструментов GnuWin и проанализирую вывод «routes», но, возможно, есть более простой/чистый способ?

решение1

Вы можете легко использоватьpowershell:

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>

Сравните это с запуском ROUTE PRINT из командной строки Windows. Powershell — многословный язык сценариев, поэтому вы можете легко обновить скрипт конфигурации клиента OpenVPN, я предполагаю, что это то, что вы пытаетесь сделать. Он также основан на объектно-ориентированном подходе.

Я бы сделал следующее:

1) Возьмите таблицу маршрутизации из wmi (показано выше)

2) Каждая запись таблицы маршрутизации представляет собой одну запись в массиве (отсюда [0] после переменной выше)

3) Выполняйте foreach для массива, пока не найдете нужный вам IP-адрес.

4) Получите элемент NextHop из записи RouteTable и сохраните его.

5) Считайте файл конфигурации клиента OpenVPN (использование get-content в PowerShell создаст массив строк файла)

6) Пройдитесь по массиву строк, пока не найдете строку, которую необходимо заменить, затем замените строку и сохраните файл.

Надеюсь, это укажет вам правильное направление.

Связанный контент