Подготовка виртуальной машины Windows с помощью Vagrant не может выполнять удаленные команды WinRM

#windows #vagrant #vagrant-windows

Вопрос:

Я пытаюсь установить некоторые базовые инструменты на существующий ящик Vagrant, но мои команды оболочки не работают, потому что Vagrant не может выполнять команды WinRM.

Я получаю следующий результат:

 ❯ vagrant up --provider vmware_workstation
Bringing machine 'default' up with 'vmware_workstation' provider...
==> default: Cloning VMware VM: 'StefanScherer/windows_2019'. This can take some time...
==> default: Verifying vmnet devices are healthy...
==> default: Preparing network adapters...
==> default: Fixed port collision for 3389 => 3389. Now on port 2200.
==> default: Starting the VMware VM...
==> default: Waiting for the VM to receive an address...
==> default: Forwarding ports...
    default: -- 3389 => 2200
    default: -- 5985 => 55985
    default: -- 5986 => 55986
    default: -- 22 => 2222
==> default: Waiting for machine to boot. This may take a few minutes...
    default: WinRM address: 127.0.0.1:55985
    default: WinRM username: vagrant
    default: WinRM execution_time_limit: PT2H
    default: WinRM transport: negotiate
An error occurred executing a remote WinRM command.

Shell: Cmd
Command: hostname
Message: [WSMAN ERROR CODE: 2147942421]: <f:WSManFault Code='2147942421' Machine='127.0.0.1' xmlns:f='http://schemas.microsoft.com/wbem/wsman/1/wsmanfault'><f:Message><f:ProviderFault path='%systemroot%system32winrscmd.dll' provider='Shell cmd plugin'>The device is not ready. </f:ProviderFault></f:Message></f:WSManFault>
 

Когда я смотрю на виртуальную машину, на ней открывается всплывающее окно «хотите ли вы доверять этой сети». Когда я следую процессу и принимаю приглашение, подготовка продолжается, как и ожидалось, но на самом деле я не хочу оставаться на месте, ожидая, пока Windows появится, чтобы нажать кнопку. Есть ли способ автоматизировать это?

Это файл Vagrant, который я использую:

 Vagrant.configure("2") do |config|
  config.vm.box = "StefanScherer/windows_2019"

  # Setup environment.
  config.vm.provision "shell", path: "provision.ps1"
  # PowerShell must be reloaded, so we'll open up a new instance.
  config.vm.provision "shell", inline: "choco feature enable -n allowGlobalConfirmation"
  config.vm.provision "shell", inline: "choco install firefox azure-cli terraform"

  config.vm.provider "vmware_workstation" do |v|
    v.gui = true
  end
end
 

Ответ №1:

Не берите в голову. После еще нескольких тестов я обнаружил, что мне просто нужно было увеличить количество повторных попыток для соединений WinRM в файле Vagrant:

 config.winrm.max_tries = 300 # default is 20
config.winrm.retry_delay = 2 #seconds. This is the defaul value and just here for documentation.
 

Это устанавливает время ожидания в 10 минут, которого на моей машине более чем достаточно для загрузки виртуальной машины Windows. Однако по умолчанию 40-х годов часто бывает недостаточно, и только иногда моя виртуальная машина будет правильно настроена.

Надеюсь, это кому-нибудь поможет.