如果计算机有多个网关,如何使用PowerShell确定哪个是默认网关?
答案 0 :(得分:9)
如果您使用的是PowerShell v3,则可以使用Get-NetIPConfiguration
例如:
Get-NetIPConfiguration | Foreach IPv4DefaultGateway
答案 1 :(得分:5)
您需要知道使用了多个网关中的哪一个?如果是这样。根据我的记忆,当多个网关可用时,使用具有最低度量的网关(基于链路速度的“成本”)。要获得此功能,请运行以下命令:
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中的顺序对网关进行相同的度量排序,您就得到了答案。
答案 2 :(得分:4)
我发现下面列出了所有活动网关,如果我错了,请纠正我
(Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
答案 3 :(得分:3)
我认为这将更加跨平台:
Get-NetRoute |
where {$_.DestinationPrefix -eq '0.0.0.0/0'} |
select { $_.NextHop }
答案 4 :(得分:1)
使用WMI查询来提取您要查找的数据。下面是一个相当简单的示例,用于为第一个行变量中指定的设备提取默认网关。这将查询设备的网络适配器并将找到的信息(对于每个适配器)显示到控制台窗口 - 提取适配器索引,适配器描述和默认网关
不应花费太多时间来扩展它以处理多个设备,或者根据通过输入文件提供的列表进行处理。
$computer = $env:COMPUTERNAME Get-WmiObject win32_networkAdapterConfiguration -ComputerName $computer | Select index,description,defaultipgateway | Format-Table -AutoSize