O Oracle VirtualBox pode ser gerenciado completamente por meio da linha de comando, para que seja possível escrever um script que faça exatamente isso.
Crie um arquivo de lote, por exemplo, Start VM.cmd
e coloque o seguinte conteúdo:
@echo off
cd /d "C:\Program Files\Oracle\VirtualBox"
start "" VirtualBox.exe --startvm "Virtual Machine 1"
set var=""
echo Waiting for the virtualbox to complete its startup routine.
:loop
for /f "delims=" %%A in ('vboxmanage list runningvms') do set "var=%%A"
set var2=%var:"=%
if "%var2%"=="Virtual Machine 1 {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}" goto next
goto loop
:next
VBoxManage controlvm "Virtual Machine 1" pause
Mude a segunda linha para o caminho onde você tem o VirtualBox instalado. Além disso, altere o nome e o guia da máquina virtual para corresponder aos seus nos vários locais do seu script.
Você pode fazer isso abrindo um prompt de comando e digitando o seguinte comando:
C:\Program Files\Oracle\VirtualBox\vboxmanage list vms
Copie toda a linha e cole-a no arquivo batch e, em seguida, remova as aspas ao redor (") do nome da Máquina Virtual.
Por exemplo, "Virtual Machine 1" {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}
se torna Virtual Machine 1 {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}
Breve história educacional
Eu faço algumas coisas neste roteiro e explico as armadilhas e porque as faço.
Eu uso o início para iniciar a máquina virtual para garantir que o script continue a ser executado enquanto a VM é iniciada. Se não o fizesse, o script aguardaria a conclusão da VM antes de continuar.
Avançar I set var=""
Isso não é tecnicamente necessário se você iniciar o script clicando duas vezes no ícone do explorer, mas se você usar o prompt de comando e executá-lo várias vezes, ele só funcionará na primeira vez.
Em seguida, crio um loop. No loop, eu pergunto quais VMs estão sendo executadas. Se a VM em que estou interessado estiver realmente em execução, quebramos o loop. Agora, eu tive que fazer um truque aqui para fazer isso funcionar. Como o vm retorna contém um "acharia que o" estava na instrução if anterior e faz com que o script não funcione. Para compensar isso, eu removo qualquer "do% var% e armazeno isso como var2. Isso é necessário porque se nenhuma VM estiver em execução,% var% não será atualizado. Eu usaria set var=%var:"=%
que funcionaria uma vez, e no O próximo loop quebra o script, terminando com um erro.
Finalmente, depois que a VM é executada, ela faz uma correspondência exata e quebra o loop. O comando pause é enviado para a VM e irá pausar a VM assim que possível. Não é instantâneo, mas o atraso é mínimo, e dado que a lista vboxmanage rodando vms retorna, o sistema sabe que aceitará o comando.