コンピューターに複数のゲートウェイがある場合、PowerShellを使用してデフォルトゲートウェイを特定するにはどうすればよいですか?
5 に答える
PowerShell v3を使用している場合は、次のGet-NetIPConfiguration
例を使用できます。
Get-NetIPConfiguration | Foreach IPv4DefaultGateway
これはもっとクロスプラットフォームになると思います:
Get-NetRoute |
where {$_.DestinationPrefix -eq '0.0.0.0/0'} |
select { $_.NextHop }
複数のゲートウェイのどれが使用されているかを知る必要がありますか?もしそうなら。私が覚えていることから、複数のゲートウェイが利用可能な場合、最も低いメトリック(リンク速度に基づく「コスト」)のゲートウェイが使用されます。これを取得するには、次のコマンドを実行します。
Get-WmiObject -Class Win32_IP4RouteTable |
where { $_.destination -eq '0.0.0.0' -and $_.mask -eq '0.0.0.0'} |
Sort-Object metric1 | select nexthop, metric1, interfaceindex
同じコストのデフォルトゲートウェイが複数ある場合は、ネットワークアダプターのバインド順序を使用して決定されたと思います。これを取得するために私が知っている唯一の方法は、GUIとレジストリを使用することです。バインド順序を含めるには、スクリプトの出力を保存し、Win32_networkadapterconfigurationからsettingsidを取得し(interfaceindexを使用して識別)、レジストリキーHKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ Tcpip \ Linkage\Bindを読み取ります。このキーには、表示されるバインド順序が一覧表示されます。win32_networkadapterconfigurationから取得するsettingsidは、デバイスを識別するGUIDです。次に、Bind reg.keyでの順序を使用して、等しいメトリックでゲートウェイを並べ替えると、答えが得られます。
私はそれをすべてのアクティブなゲートウェイをリストする以下のように見つけました、私が間違っているなら私を訂正してください
(Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
WMIクエリを使用して、探しているデータを取得します。以下は、最初の行の変数で指定されたデバイスのデフォルトゲートウェイをプルする非常に簡単な例です。これにより、デバイスにネットワークアダプターが照会され、見つかった情報(アダプターごと)がコンソールウィンドウに表示されます。アダプターのインデックス、アダプターの説明、およびデフォルトゲートウェイがプルされます。
これを拡張して複数のデバイスを処理したり、入力ファイルを介してフィードされたリストに基づいて処理したりするのにそれほど時間はかかりません。
$ computer = $ env:COMPUTERNAME Get-WmiObject win32_networkAdapterConfiguration -ComputerName $ computer | index、description、defaultipgatewayを選択| フォーマット-テーブル-AutoSize