Windows のコマンド ラインで特定のルートのゲートウェイを取得するにはどうすればよいですか?

Windows のコマンド ラインで特定のルートのゲートウェイを取得するにはどうすればよいですか?

Windows (この場合は Win7) で特定のルート (インターフェースではない) のゲートウェイを出力する方法はありますか? OpenVPN _up スクリプトでルートを動的に追加する必要がありますが、ゲートウェイは接続が形成されるときに動的に割り当てられるため、静的にスクリプト化することはできません。

_up スクリプトで使用できる環境変数 (route_vpn_gateway?) もいくつかあるようですが、まだ動作させることができていません。

GnuWin ツールの awk/grep を使用して 'routes' 出力を解析するつもりですが、もっとクリーンで簡単な方法があるでしょうか?

答え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)各ルーティングテーブルエントリは配列内の1つのエントリです(したがって、上記の変数の後に[0]があります)

3)探しているIPアドレスが見つかるまで配列に対してforeachを実行します。

4)ルートテーブルエントリからNextHopメンバーを取得して保存する

5)OpenVPN クライアント構成ファイルを読み込みます (PowerShell で get-content を使用すると、ファイルの文字列配列が作成されます)

6) 置換する文字列が見つかるまで文字列配列を反復処理し、文字列を置換してファイルを保存します。

これが正しい方向を指し示すことを願っています。

関連情報