打开另一个网络适配器

打开另一个网络适配器

在我的系统中,我有两个网络适配器,一个用于互联网,另一个用于本地网络。

当我需要使用互联网时,我会禁用本地网络适配器并启用互联网适配器,反之亦然。这是一个烦人的过程,从本地切换到互联网大约需要一分钟。

因此,我不会禁用互联网适配器,而是永久启用它,每当我需要本地时,我都会启用本地,这样它就会包装互联网并启用本地。每当我需要互联网时,我只需禁用本地,互联网(始终处于启用状态)就会尽快生效。

我已经编写了一个批处理脚本来执行此操作:(如果本地适配器(名为Unternet)被禁用,它将打开它,反之亦然)

@echo off
Set "_localState="
Set _localState=YES
netsh interface show interface "Unternet" | find "Administrative state" | find "Enabled">nul || Set _localState=NO
if %_localState%==NO (
netsh interface set interface "Unternet" enable
) ELSE (
netsh interface set interface "Unternet" disable
)

它在我的系统上运行良好,但当我在另一个系统上尝试时,它却不行。问题出在哪里?我如何才能如此快速地通过互联网网络打开/关闭本地网络?

答案1

要给出确切原因的答案,问题中给出的信息是不够的。但这里有一些可能引发你的问题的主要诱因。

一些可能出现的问题

特权

要执行类似的更改,netsh interface SET ...您必须以管理权限执行该命令。

最好创建shortcut.lnk批处理并配置快捷方式以cmd.exe使用管理权限执行。

接口名称(第 4 行)

考虑到(在另一个系统上)可能不存在名为“Unternet”的接口。要解决该问题,请在第 3 行和第 4 行之间插入此代码:

netsh interface show interface "Unternet">nul
if ERRORLEVEL 1 (
   echo "ERR: Problem with interface Unternet."
) else ( ...

您对字符串的检查Administrative state取决于Enabled系统的语言设置。例如,这是德语系统的输出:

netsh interface show interface "Unternet"

Unternet
   Typ:                  Dediziert
   Verwaltungsstatus:    Aktiviert
   Verbindungsstatus:    Verbunden

=> 如果系统语言_localState=NO不同总是所造成的状态。

为了独立于语言设置进行测试,ERRORLEVEL将会很有帮助。但netsh在这种情况下不会有帮助,因为它的错误级别仅表明netsh执行成功。

我建议使用ipconfig.exe

通过第 4 行上方插入的检查,我们在第 4 行知道存在设备“Unternet”(与其状态无关)。
通过设备检查设备ipconfig只会在活动时显示(与netsh的输出相反)。
因此,当按设备名称进行过滤时,我们可以在 ERRORLEVEL 中看到find设备是 ENABLED 还是 DISABLED:

ipconfig /allcompartments | find /I "Unternet">nul
if ERRORLEVEL 1 ( ...

请注意,检查if ERRORLEVEL 1 ...结果为 TRUE所有值都等于或大于 1


解决方案

最终的脚本(稍微优化)可能是这样的:(
以管理员权限启动)

@echo off
::   Configure the net device name of the local LAN:
set localNetDev=Unternet

::   Check the existence of the net device:
netsh interface show interface "%localNetDev%">nul
if ERRORLEVEL 1 (
    echo "ERR: Problem with interface '%localNetDev%'."
) else (
    ipconfig /allcompartments | find /I "%localNetDev%">nul
    if ERRORLEVEL 1 (
        ::   %localNetDev%  is DISABLED – Switch it on:
        netsh interface set interface "%localNetDev%" enable
    ) else (
        ::   %localNetDev%  is ENABLED – Switch it OFF:
        netsh interface set interface "%localNetDev%" disable
    )
)

::   View result:
echo New state:
netsh interface show interface "%localNetDev%"

答案2

问题出在网络适配器的优先级上。我将本地适配器的优先级设置为高于互联网适配器的优先级,现在一切正常。

以下是更多信息: https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10

相关内容