7

如果一台计算机有多个网关,如何使用 PowerShell 确定哪个是默认网关?

4

5 回答 5

16

如果您使用的是 PowerShell v3,则可以使用Get-NetIPConfiguration例如:

Get-NetIPConfiguration | Foreach IPv4DefaultGateway
于 2012-12-13T22:26:46.187 回答
11

我认为这将更加跨平台:

 Get-NetRoute |
    where {$_.DestinationPrefix -eq '0.0.0.0/0'} |
    select { $_.NextHop }
于 2017-03-03T18:43:40.890 回答
6

您需要知道使用了多个网关中的哪一个?如果是这样。据我记得,当多个网关可用时,使用具有最低指标(“成本”基于链路速度)的网关。为此,请运行以下命令:

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 中的顺序对具有相同度量的网关进行排序,您就会得到答案。

解释于:Technet Social - NIC 适配器绑定

于 2012-12-13T23:52:00.597 回答
5

我发现它如下列出了所有活动网关,如果我错了,请纠正我

(Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
于 2012-12-14T19:57:31.427 回答
1

使用 WMI 查询来提取您要查找的数据。下面是一个相当简单的示例,用于为第一行变量中指定的设备提取默认网关。这将查询设备的网络适配器并将找到的信息(对于每个适配器)显示到控制台窗口 - 拉取适配器索引、适配器描述和默认网关

扩展它以处理多个设备或基于通过输入文件提供的列表进行处理应该不需要太多。

$computer = $env:计算机名

Get-WmiObject win32_networkAdapterConfiguration -ComputerName $computer |
选择索引、描述、默认ipgateway |
格式表-AutoSize
于 2012-12-13T22:13:36.767 回答