解决方案

解决方案

我使用 powershell 脚本来手动设置我的 DNS

这很有效,但是当我在 wifi 和两个不同的扩展坞之间移动时,get-NetAdapter 中的“ifIndex”会发生变化。

仅过滤“Up”是行不通的,因为有多个 Up 接口(见下文)

我想我需要检测既处于启动状态又为通向公共路线的接口(例如,在通向 google.com 或某个公共网站的路线上)。

这个怎么做?

PS C:\Users\joe> get-netadapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
Ethernet                  TAP-ProtonVPN Windows Adapter V9             32 Disconnected 00-FF-F9-EE-DD-E4         1 Gbps
VMware Network Adapte...1 VMware Virtual Ethernet Adapter for ...      30 Up           00-50-56-EE-DD-01       100 Mbps
Wi-Fi                     Dell Wireless 1820A 802.11ac                 25 Up           C8-FF-28-EE-DD-4D       702 Mbps
VMware Network Adapte...8 VMware Virtual Ethernet Adapter for ...      24 Up           00-50-56-EE-DD-08       100 Mbps
Bluetooth Network Conn... Bluetooth Device (Personal Area Netw...      15 Disconnected C8-FF-28-EE-DD-4E         3 Mbps
vEthernet (Default Swi... Hyper-V Virtual Ethernet Adapter             22 Up           00-15-5D-EE-DD-F0        10 Gbps
vEthernet (WSL)           Hyper-V Virtual Ethernet Adapter #2          38 Up           00-15-5D-EE-DD-00        10 Gbps

答案1

@多喝点皮条客果汁 IT已经提到了一个简单的解决方案,如果only one network adapter启用并激活默认网关,该解决方案就可以工作。

如果您同时启用并激活了多个网络适配器(当您使用笔记本电脑通过以太网连接时不会禁用或断开 WiFi 适配器时就会发生这种情况),那么您将拥有两条路由,其路由度量为0,但 InterfaceMetric 不同。

当手动配置路由时,默认路由的路由度量也可能0根本不存在。

解决方案

RouteMetric在这种情况下,如果您想获取操作系统的全局默认路由,则必须将和相加,InterfaceMetric并使用 IPv4 和 IPv6 的默认路由作为目标过滤器。

以下命令使用 IPv4 和 IPv6 默认路由获取操作系统的默认路由。

Get-NetRoute -DestinationPrefix '0.0.0.0/0', '::/0' |
    Sort-Object -Property { $_.InterfaceMetric + $_.RouteMetric } |
    Select-Object -First 1

'::/0'如果只想确定 IPv4 路由,可以删除 IPv6 目标前缀。

使用返回的接口索引,ifIndex您可以更改相应的网络适配器。也可以将上面的输出直接传输到Get-NetAdapter或任何其他接受 InterfaceIndex 作为命名属性的 cmdlet。

PowerShell 6+

从 PowerShell 6 开始,我们可以简化命令,因为有了新的Top参数Sort-Object

Get-NetRoute -DestinationPrefix '0.0.0.0/0', '::/0' |
    Sort-Object -Property { $_.InterfaceMetric + $_.RouteMetric } -Top 1 

信息资源

答案2

您可以使用获取网络路由获取具有0false值的适配器索引号,该值是最低度量,因此该适配器应是流量使用的默认适配器。

电源外壳

Get-NetRoute | ForEach-Object { Process { If (!$_.RouteMetric) { $_.ifIndex } } };
Set-DNSClientServerAddress –interfaceIndex $intix –ServerAddresses ("127.0.0.1","1.1.1.2");

输出示例

命令: Get-NetRoute | Select InterfaceAlias, InterfaceIndex, RouteMetric | FL

InterfaceAlias : Loopback Pseudo-Interface 1
InterfaceIndex : 1
RouteMetric    : 256

InterfaceAlias : Wi-Fi 3
InterfaceIndex : 7
RouteMetric    : 0

InterfaceAlias : Local Area Connection* 12
InterfaceIndex : 14
RouteMetric    : 256

InterfaceAlias : Local Area Connection* 11
InterfaceIndex : 27
RouteMetric    : 256

支持资源

相关内容