如何从powershell中获取默认网关?

a14dhokn  于 2022-12-18  发布在  Shell
关注(0)|答案(6)|浏览(218)

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

brgchamk

brgchamk1#

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

Get-NetIPConfiguration | Foreach IPv4DefaultGateway
5fjcxozz

5fjcxozz2#

我认为这将是更多的跨平台:

Get-NetRoute |
    where {$_.DestinationPrefix -eq '0.0.0.0/0'} |
    select { $_.NextHop }
zed5wv10

zed5wv103#

您需要知道使用了多个网关中的哪一个?如果是这样的话。据我所知,当多个网关可用时,将使用度量值最低的网关(“成本”基于链路速度)。要获得此信息,请运行以下命令:

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(使用接口索引标识),然后读取注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Linkage\Bind。此注册表项列出了它的绑定顺序,而你从win32_networkadapterconfiguration获得的settingsid是它们标识设备的GUID。然后使用它们在Bind reg.键中的顺序对度量相等的网关进行排序,你就得到了答案。
解释于:Technet Social - NIC adapter binding

kyxcudwk

kyxcudwk4#

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

(Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled}).DefaultIPGateway
8mmmxcuj

8mmmxcuj5#

使用WMI查询提取您正在查找的数据。下面是一个相当简单的示例,用于提取第一行变量中指定的设备的默认网关。这将查询设备中的网络适配器,并将找到的信息(每个适配器的)显示到控制台窗口-提取适配器索引、适配器描述和默认网关
扩展到处理多个设备,或者基于通过输入文件提供的列表进行处理,应该不会花费太多时间。

$computer = $env:COMPUTERNAME

Get-WmiObject win32_networkAdapterConfiguration -ComputerName $computer | 
Select index,description,defaultipgateway |
Format-Table -AutoSize
jtw3ybtb

jtw3ybtb6#

$ActiveNet =  Get-NetAdapter –Physical  |Where-Object {$_.status -eq "Up"} |  select name 

$Network = Get-NetIPAddress |Where-Object EnabledDefault -EQ 2 | Where-Object InterfaceAlias  -EQ $ActiveNet.name  | Where-Object IPv4Address -NE $null | select * 

$DefautGateway = Get-NetRoute -InterfaceIndex $Network.InterfaceIndex -DestinationPrefix "0.0.0.0/0" | select NextHop

$DefautGateway.NextHop

相关问题