Eu configurei o vagrant conforme descrito nos documentos .
Ao executar vagrant up
recebo a seguinte mensagem:
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.
Embora eu entenda a mensagem, sinto que esse não é o problema subjacente. Eu fiz
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
e a seguinte reinicialização.
Get-VM
lista todas as minhas máquinas. Portanto, sinto que os cmdlets do Hyper-V devem ser instalados e utilizáveis.
Isso está sendo executado no Windows 10 20H2, a versão do Vagrant é 2.2.14, a versão do módulo Hyper-V PowerShell é 2.0.0.0
O que estou perdendo aqui?
Editar:
Os recursos do Hyper-V instalados são:
Versão do 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
Eu também fiz uma postagem cruzada para discutir.hashicorp.com
Editar 2
O erro está vindo do \Vagrant\embedded\gems\2.2.14\gems\vagrant-2.2.14\plugins\providers\hyperv\scripts\check_hyperv.ps1
qual essencialmente vem Get-Command "Hyper-V\Get-VMSwitch"
e se isso falhar, relata o erro.
Agora, meu sistema parece não conseguir carregar Hyper-V\Get-VMSwitch
sem alguma "ajuda":
❯ 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**
Até onde eu sei, a instalação do Vagrant foi feita corretamente e de acordo com a documentação. Não consigo ver nada de errado, e todos os comentários foram respondidos pelo postador.
Minha conclusão é que o Vagrant com Hyper-V tem um problema na atualização mais recente do Windows 10.
As opções que vejo são:
Para ter a imagem completa aqui, adicionarei uma resposta adicional:
Depois de muito tentar e verificar outras máquinas para referência cruzada, tudo se resumiu a
Import-Module Hyper-V
não funcionar na minha máquina, enquanto ao mesmo tempoGet-VMSwitch
carregava implicitamente o módulo Hyper-V.Isso me levou eventualmente a
$env:PSModulePath
, que em duas (!) de minhas máquinas se pareciam com isso:(observe o
System.String[]
no final) enquanto em máquinas recém-instaladas continha%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules
(e não osSystem.String[]
escombros)Então. Mudando
PSModulePath
o ambiente para ficar assim:resolveu todo o problema.