我使用 powershell 脚本手动设置我的 DNS。
这很好用,但是当我在 wifi 和两个不同的扩展坞之间移动时,get-NetAdapter 中的“ifIndex”会发生变化。
只过滤“Up”是行不通的,因为有多个 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
您可以使用get-netroute来获取适配器索引号,其中
0
orfalse
值是最低指标,因此适配器应该是默认使用的流量。电源外壳
输出样本
命令:
Get-NetRoute | Select InterfaceAlias, InterfaceIndex, RouteMetric | FL
支持资源
@Drink More Pimp Juice IT已经提到了一个简单的解决方案,如果
only one network adapter
启用并激活了默认网关,该解决方案就可以工作。如果您同时启用和激活了多个网络适配器,当您使用通过以太网连接时未禁用或断开 WiFi 适配器的笔记本电脑时会发生这种情况,您将有两条路由,其路由度量为
0
,但具有不同接口度量的。当手动配置路由时,默认路由的路由度量也可能根本不
0
存在。解决方案
在这种情况下,如果要获取操作系统的全局默认路由,则必须取总和,
RouteMetric
并InterfaceMetric
使用 IPv4 和 IPv6 的默认路由作为目标过滤器。以下命令使用 IPv4 和 IPv6 默认路由获取操作系统的默认路由。
使用返回的接口索引
ifIndex
,您可以更改相应的网络适配器。也可以将上面的输出直接通过管道传输到Get-NetAdapter
接受 InterfaceIndex 作为命名属性的任何其他 cmdlet。PowerShell 6+
从 PowerShell 6 开始,我们可以简化命令,因为有新参数
Top
可用于Sort-Object
.信息资源
配置网络接口的顺序
https://docs.microsoft.com/en-us/windows-server/networking/technologies/network-subsystem/net-sub-interface-metric
IPv4 路由的自动度量功能的说明
https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/automatic-metric-for-ipv4-routes