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:
- 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.
- 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.txt
die ich die gemeldeten Nachrichten sehen kann.