无法删除 HyperV vEthernet(默认交换机)

无法删除 HyperV vEthernet(默认交换机)

基本上是这样的:如何一劳永逸地删除所有 vEthernet(默认交换机)?

只是,我删除了 hyperV 和容器功能,结果只是 NIC 报告为已禁用。但它仍然存在。然后我重新安装了 hyperV,它创建了一个第二一个。删除已禁用的 HyperV,但没有删除第二个。

我手动将其从注册表中删除(请参阅此处的第三篇文章:https://social.technet.microsoft.com/Forums/en-US/7f18af6f-4f6b-40ac-94bc-4be32e850fb1/vethernet-default-switch?forum=win10itpronetworking) 但这并没有什么区别。

所以我的问题是,除了重置我的笔记本电脑,我怎样才能让这个愚蠢的事情消失?它搞砸了我的网络(WiFi 和以太网之间的自动切换不再起作用)

编辑:为了澄清起见,我的最终目标是(a)删除(卸载)Hyper-V 和(b)删除卸载 Hyper-V 后剩下的(现在不必要的和不需要的)Hyper-V 开关。

答案1

  1. 使用 Hyper-V 管理控制台或设备管理器(又名 devmgmt.msc)删除虚拟 NIC。不要通过注册表删除 NIC

  2. 您可以通过 PowerShell 删除虚拟交换机,如下所示:https://www.starwindsoftware.com/blog/basic-hyper-v-virtual-nic-management

  3. 另外,作为一种解决方法,您可以尝试以下步骤。https://social.technet.microsoft.com/Forums/windows/en-US/e49df568-4f4c-47b7-b30c-952d1e26ca58/cant-remove-failed-virtual-switch-from-hypervs-virtual-switch-manager

答案2

尽管投票结果不佳,我找到了一个明确的解决方案。[注意微软的回应] 我的解决方案有效,即使启用了 Hyper-V。我们中的许多人都不想禁用 Hyper-V 安全性,而且这里其他任何方法在 Windows 10 2004 上都不起作用,重新启动时所有内容都会被替换,甚至包括增加攻击面的 netbios 设置,而且每次配置数百个适配器都很麻烦。即使使用绑定所有设置都会在重启时恢复。彻底禁用这些适配器的一种方法是禁用DNScacheakaDns Client服务并使用第三方 DNS 服务,例如丙烯酸纤维, 或者SimpleDNSCrypt。请务必仔细检查 Acrylics 配置,因为最初您的默认 DNS 提供商将自动设置为 google 或 cloudflare。然后将 Acrylic 指向您的路由器 IP 或首选 DNS 服务器,并将所有适配器的 DNS 设置设置为127.0.0.1

您必须使用 regedit 禁用 DNSCache,如下所示:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache

设置start to 4,然后重新启动。

唯一的小问题是,您可能会看到单个适配器不断短暂地出现和消失,Control Panel\Network and Internet\Network Connections并且每次尝试安装适配器时,设备管理器窗口都会不断刷新。在我启用 DNSCache(在我最初开始使用 Hyper-V 之前已禁用)然后再次禁用它之后,这个问题似乎已经消失。另一个警告是,最初加载 Windows 商店时,您会收到一个错误,除非您之前已在启用 DNScache 的情况下打开商店。此后,除非您重置它,否则商店将无限期地工作。考虑到这有多烦人,这并不是什么大问题,这实际上是有效的。

答案3

我想我已经解决了。我删除了这两个键下的所有条目:

HKLM\SYSTEM\CurrentControlSet\Services\VMSMP\Parameters\NicList HKLM\SYSTEM\CurrentControlSet\Services\VMSMP\Parameters\SwitchList

然后重新启动。我应该指出,这显然是核选项。

编辑:正如评论中提到的,如果我记得设备管理器是一个东西,设备管理器可能也会起作用。

答案4

每当发生任何交换机更改时,此计划任务应禁用 Hyper-V 默认交换机:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2022-05-01T00:00:00.0000000</Date>
    <Author>Hyper-V Default Switch Disabler</Author>
    <URI>\Disable Hyper-V Default Switch</URI>
  </RegistrationInfo>
  <Triggers>
    <BootTrigger>
      <Enabled>true</Enabled>
    </BootTrigger>
    <LogonTrigger>
      <Enabled>true</Enabled>
    </LogonTrigger>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-Hyper-V-VmSwitch-Operational"&gt;&lt;Select Path="Microsoft-Windows-Hyper-V-VmSwitch-Operational"&gt;*[System[Provider[@Name='Microsoft-Windows-Hyper-V-VmSwitch'] and EventID=220]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
      <Arguments>-Command "&amp;{ Disable-NetAdapter -Confirm:$false -Name 'vEthernet (Default Switch)' }"</Arguments>
    </Exec>
  </Actions>
</Task>

不幸的是我不知道该怎么做删除通过命令行/PowerShell 连接到设备。我知道可以通过以下方式实现映射:

$(Get-PnpDevice | Where-Object{$_.Name -eq $(Get-NetAdapter -Name 'vEthernet (Default Switch)')[0].InterfaceDescription})[0].InstanceId

然后必须从设备管理器中删除 InstanceId。

相关内容