Gibt es eine Möglichkeit, das Gateway für eine bestimmte Route (keine Schnittstelle) in Windows (in diesem Fall Win7) auszudrucken? Ich müsste eine Route dynamisch in einem OpenVPN _up-Skript hinzufügen, aber da das Gateway beim Herstellen der Verbindung dynamisch zugewiesen wird, kann ich es nicht statisch skripten.
Möglicherweise sind auch einige Umgebungsvariablen (route_vpn_gateway?) für die _up-Skripte verfügbar, aber ich habe es nicht geschafft, sie zum Laufen zu bringen.
Ich nehme an, ich kann awk/grep aus den GnuWin-Tools verwenden und die „Routen“-Ausgabe analysieren, aber vielleicht gibt es einen saubereren/einfacheren Weg?
Antwort1
Sie können ganz einfachPower Shell:
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>
Vergleichen Sie dies mit dem Ausführen von ROUTE PRINT von einer Windows-Befehlszeile aus. Powershell ist eine ausführliche Skriptsprache, sodass Sie das OpenVPN-Client-Konfigurationsskript problemlos aktualisieren können. Ich gehe davon aus, dass dies das ist, was Sie versuchen. Es ist auch objektorientiert.
Ich würde etwa folgendermaßen vorgehen:
1) Holen Sie sich die Routing-Tabelle von WMI (siehe oben)
2)Jeder Routing-Tabelleneintrag ist ein Eintrag in einem Array (daher die [0] nach der Variablen oben)
3)Führen Sie ein foreach auf dem Array aus, bis Sie die gesuchte IP-Adresse finden
4)Holen Sie sich das NextHop-Mitglied aus dem RouteTable-Eintrag und speichern Sie es
5) Lesen Sie die Konfigurationsdatei des OpenVPN-Clients ein (mithilfe von „get-content“ in Powershell wird ein Zeichenfolgenarray der Datei erstellt)
6)Durchlaufen Sie das Zeichenfolgenarray, bis Sie die Zeichenfolge finden, die Sie ersetzen möchten. Ersetzen Sie dann die Zeichenfolge und speichern Sie die Datei.
Ich hoffe, dies weist Sie in die richtige Richtung.