Como iniciar / retomar um Oracle VirtualBox e imediatamente após pausá-lo?

0

Gostaria de iniciar ou retomar uma máquina virtual, e assim que puder controlar o mouse, coloque-a no modo de pausa (host + p).

Dessa forma, posso iniciar a VM e outras tarefas, mas não ter os recursos do sistema de drenagem de vm, mas posso usar a VM à vontade descompactando-a. Assim como no firefox, inicie na memória, para que fique disponível quando você precisar.

Estou usando o Windows.

    
por LPChip 06.09.2015 / 13:51

1 resposta

0

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.

    
por 06.09.2015 / 13:51