在 Hyper-V 中使用 Vagrant 需要什么

在 Hyper-V 中使用 Vagrant 需要什么

我已经按照说明设置了 vagrant文档

运行时vagrant up我收到以下消息:

Bringing machine 'default' up with 'hyperv' provider...
==> default: Verifying Hyper-V is enabled...
The Hyper-V cmdlets for PowerShell are not available! Vagrant
requires these to control Hyper-V. Please enable them in the
"Windows Features" control panel and try again.

虽然我理解这个信息,但我觉得这不是根本问题。我确实

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

然后重新启动。

Get-VM列出了我的所有机器。所以我觉得 Hyper-V cmdlet 应该已经安装并可以使用了。

这是在 Windows 10 20H2 上运行的,Vagrant 版本是 2.2.14,Hyper-V PowerShell 模块版本是 2.0.0.0

我在这里遗漏了什么?

编辑:

已安装的 Hyper-V 功能包括:

在此处输入图片描述

PowerShell 版本:

> $psversiontable

Name                           Value
----                           -----
PSVersion                      5.1.19041.610
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.610
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

我也转发到了discuss.hashicorp.com

编辑2

错误来自\Vagrant\embedded\gems\2.2.14\gems\vagrant-2.2.14\plugins\providers\hyperv\scripts\check_hyperv.ps1本质上就是这样的Get-Command "Hyper-V\Get-VMSwitch",如果失败就会报告错误。

现在,我的系统似乎无法Hyper-V\Get-VMSwitch在没有一些“帮助”的情况下加载:

❯ get-command "Hyper-V\Get-VMSwitch"
get-command : The term 'Hyper-V\Get-VMSwitch' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1
+ get-command "Hyper-V\Get-VMSwitch"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Hyper-V\Get-VMSwitch:String) [Get-Command], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand

❯ get-command "Get-VMSwitch"

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-VMSwitch                                       2.0.0.0    Hyper-V


❯ get-command "Hyper-V\Get-VMSwitch"

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Get-VMSwitch                                       2.0.0.0    Hyper-V
**strong text**

答案1

据我所知,Vagrant 安装正确,且符合文档要求。我没有发现任何问题,所有评论都得到了发帖者的回复。

我的结论是,带有 Hyper-V 的 Vagrant 在最新的 Windows 10 升级下出现了问题。

我看到的选项是:

  • 等待 Vagrant 发布修正版本
  • 解决问题 HashiCorp 支持 (不太可能得到答案),或者 流浪者社区
  • Vagrant 先与 VirtualBox 合作,之后才与 Hyper-V 合作,而且很可能仍能很好地运行。您可能需要在等待 Hyper-V 解决方案(性能可能更高)时暂时回退到 VirtualBox。

答案2

为了全面了解情况,我将添加一个额外的答案:

经过多次尝试并检查其他机器的交叉引用后,最终发现它Import-Module Hyper-V无法在我的计算机上运行,​​同时Get-VMSwitch会隐式加载 Hyper-V 模块。

这最终让我想到了$env:PSModulePath,在我的两台(!)机器上它看起来像这样: 在此处输入图片描述

(注意System.String[]结尾)而在新安装的机器上它包含%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules(而不是System.String[]废墟)

那么。将PSModulePath环境更改为如下形式: 在此处输入图片描述

解决了整个问题。

相关内容