Wie speichere ich den Status einer VirtualBox-Gastbetriebssystem-VM bei einer Windows-Host-Abmeldung?

0

Ich verwende ein Ubuntu VM-Gastbetriebssystem im Headless-Modus auf einem Windows 7-Host. Ich habe ein Batch-Skript geschrieben, das VBoxManage verwendet, um den Status der VM basierend auf dem übergebenen Argument zu starten oder zu speichern. Ich kann die VM problemlos starten, indem ich eine Verknüpfung zum Skript in meinen Startordner lege, aber ich habe Probleme, die VM beim Abmelden anzuhalten.

Ich habe ein paar verschiedene Methoden ausprobiert:

  1. Beim Erstellen eines Skripteintrags zum Abmelden von Benutzern im lokalen Gruppenrichtlinien-Editor (gpedit.msc) wird mein Skript ausgeführt, der VBoxManage-Prozess meldet jedoch, dass die VM nicht ausgeführt wird. Ich gehe davon aus, dass der Abmeldeprozess die VM beendet, bevor mein Skript darauf zugreifen kann.
  2. Das Erstellen einer Aufgabe über den Taskplaner, die bei Ereignis 7002 ausgelöst wird, von dem ich erfahre, dass es sich um das Abmeldeereignis handelt, führt das Skript aus, VBoxManage meldet jedoch Folgendes:

VBoxManage.exe: Fehler: Das VirtualBox-Objekt konnte nicht erstellt werden!

VBoxManage.exe: Fehler: Code E_ACCESSDENIED (0x80070005) - Fehler "Allgemeiner Zugriff verweigert" (erweiterte Informationen nicht verfügbar)

VBoxManage.exe: Fehler: Der VirtualBox COM-Server wird wahrscheinlich nicht ausgeführt oder konnte nicht gestartet werden.

Gibt es eine bessere Möglichkeit, den Status einer VM beim Abmelden von Windows automatisch anzuhalten?


Der Inhalt des Batch-Skripts:

@echo off

setlocal

rem list of VMs to start/stop
set vm_list=Ubuntu

set action=%1
if not "%action%" == "start" if not "%action%" == "stop" exit /B

set command="C:\Program Files\Oracle\VirtualBox\VboxManage.exe"
set logfile="C:\bin\vm_log.txt"

if exist %logfile% echo.>> %logfile%

echo %date% %time%>> %logfile%

for %%A in (%vm_list%) do (
    if "%action%" == "start" (
        echo Starting %%A>> %logfile% 2>&1
        %command% startvm %%A --type headless >> %logfile% 2>&1
    ) else if "%action%" == "stop" (
        echo Suspending %%A>> %logfile% 2>&1
        %command% controlvm %%A savestate >> %logfile% 2>&1
    )   
)

endlocal

Ich habe die Ausgabe der Befehle umgeleitet, auf vm_log.txtdie ich die gemeldeten Nachrichten sehen kann.

Pak
quelle
Können Sie Ihr Batch-Skript veröffentlichen? Es scheint, als ob VirtualBox selbst heruntergefahren wurde, bevor das Skript den Befehl zum Speichern von Snapshots / Status ausführen kann.
JakeGould
1
Ich habe den Inhalt des Skripts gemäß Ihrer Anfrage gepostet. Ich vermute, dass bei beiden Methoden, die ich ausprobiert habe, VirtualBox heruntergefahren wird, bevor mein Skript ausgeführt wird.
Pak