如何通过 powershell 脚本将 WSL hyper-v vmswitch 设置为外部

如何通过 powershell 脚本将 WSL hyper-v vmswitch 设置为外部

我正在尝试通过脚本将 WSL 虚拟交换机设置为外部。看起来我做对了,但它给出了错误。我在以管理员身份运行的 Powershell 中尝试了以下两种变体。

> Set-VMSwitch -Name WSL -SwitchType External -AllowManagementOS $true -NetAdapterName "Ethernet 2"
Set-VMSwitch: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.

> Set-VMSwitch -Name WSL -SwitchType External -AllowManagementOS $true -NetAdapterInterfaceDescription "Intel*"
Set-VMSwitch: Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.

我已经能够使用 New-VMSwitch 创建一个新的交换机,但如果我这样做,在尝试启动 WSL 时会出现以下错误:

The network was not found.
Error code: Wsl/Service/CreateInstance/CreateVm/ConfigureNetworking/0x803b0001

答案1

解决方案是-SwitchType External从命令行中删除。显然Set-VMSwitch非常特别。它不想被告知 SwitchType,它希望它是隐含的。仔细阅读微软文档中的第二个例子表明它是解决方案。

以下几行代码也有助于获取名称:

$switch = Get-VMSwitch WSL
$adapter = Get-NetAdapter | Where-Object Status -eq Up | Sort-Object ifIndex | Where-Object {$_.Name -NotMatch 'vEthernet' -and $_.Name -notmatch 'Network Bridge'} | Select-Object -First 1
Set-VMSwitch $switch.Name -NetAdapterName $adapter.Name

请注意,如果您像我一样对 WSL 执行此操作,那么这仅在 WSL 已启动但被终止时才对我有效。启动后,直到 WSL 启动后才会创建 WSL 虚拟交换机。因此,我用 启动了 WSL wsl --exec "echo",终止它wsl --terminate,运行上述操作,然后再次启动 WSL。可能有更简单的方法。

相关内容