Я хотел бы запустить или возобновить работу виртуальной машины, и как только я смогу управлять мышью, переведите ее в режим паузы (host+p).

Таким образом, я могу запустить vm и другие задачи, но у меня нет системных ресурсов vm dump, но я могу использовать виртуальную машину по своему усмотрению, отключив ее. Как и в случае с Firefox, запустите его в память, чтобы он был доступен, когда вам это нужно.

Я использую Windows.

1 ответ1

0

С Oracle VirtualBox можно полностью управлять через командную строку, поэтому можно написать сценарий, который делает именно это.

Создайте пакетный файл, например, Start VM.cmd и поместите в него следующее содержимое:

@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

Измените 2-ую строку на путь, по которому установлен VirtualBox. Кроме того, измените имя и guid виртуальной машины, чтобы она соответствовала вашей в разных местах вашего скрипта.

Вы можете сделать это, открыв командную строку и введя следующую команду:

C:\Program Files\Oracle\VirtualBox\vboxmanage list vms

Скопируйте всю строку и вставьте ее в пакетный файл, затем удалите окружающие кавычки (") из имени виртуальной машины.

Например, "Virtual Machine 1" {d325eda7-8abc-4083-9bc5-d41b3acf0ba5} становится Virtual Machine 1 {d325eda7-8abc-4083-9bc5-d41b3acf0ba5}

Краткая учебная история

Я делаю несколько вещей в этом сценарии, и я объясню подводные камни и почему я их делаю.

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

Далее я set var="" Это технически необязательно, если вы запускаете сценарий двойным щелчком по значку из проводника, но если вы используете командную строку и запускаете ее несколько раз, она будет работать только в первый раз.

Далее я создаю цикл. В цикле я запрашиваю, какие виртуальные машины работают. Если виртуальная машина, которая мне интересна, действительно работает, мы прерываем цикл. Теперь я должен был выполнить трюк здесь, чтобы сделать эту работу. Поскольку возврат vm содержит "он бы подумал", был ранее в операторе if и заставляет скрипт не работать. Чтобы противодействовать этому, я удаляю любое из% var% и сохраняю как var2. Это необходимо, поскольку если виртуальная машина не запущена,% var% не обновляется. Если бы я использовал set var=%var:"=% это сработало бы один раз, а в следующем цикле разрывает скрипт, завершая его с ошибкой.

Наконец, после запуска виртуальной машины она выполняет точное совпадение и прерывает цикл. Затем команда паузы отправляется на виртуальную машину, и она приостанавливает работу виртуальной машины как можно скорее. Это не мгновенно, но задержка минимальна, и, учитывая, что список vboxmanage, запускающий vms, возвращает его, система знает, что примет команду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .