VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Deine Frage passt nicht in die anderen Bereiche, dann stelle sie hier.
Antworten
Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2113
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 207 Mal
Danke erhalten: 273 Mal
Gender:

VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 15.09.2022, 16:23

Wer öfter mal mit Windows Installationen herumspielt, um Dinge zu testen (z.B. Änderungen an einer autounattend.xml), wird die Vorzüge einer Virtuellen Maschine genießen.
Es ist zwar einfach genug, die virtuellen Maschine mit dem Hyper-V Manager zu erstellen; oder eben mit dem Oracle VirtualBox Manager:
man kan das Erstellen (und ggf. das Löschen) der VM aber auch automatisieren.
Wie das mit Hyper-V geht, habe ich hier
viewtopic.php?t=25114&hilit=l%C3%B6sungsansatz#p361369
vorgestellt.
Nun wollte ich wissen, ob das auch mit VirtualBox geht. Auf meine Frage habe ich hier
https://www.deskmodder.de/blog/2022/09/ ... /#comments bislang keine und im Netz nur unbefriedigende Antworten erhalten.
Im Internet gibt es viele Lösungsansätze für Linux, aber ich konnte keine Komplettlösung für VirtualBox mit Windows 11 als Script finden.
Da VirtualBox seit Version 6.1.28 nunmehr auch Windows 11 unterstützt, lag es nahe, die Erstellung der VM mit Windows 11 unter Windows zu automatisieren.

Der Minimalansatz sieht so aus:
Den Inhalt kopieren, in Editor speichern und z.B. als VBOX_Auto.cmd speichern

Code: Alles auswählen

SET VBOXMANAGE=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe
SET VMNAME=WIN11
SET OSTYPE=Windows11_64
SET ISOPATH=%homepath%\Downloads\
SET ISONAME=25201.1000.Copper-X64-DE-CLIENTPRO

"%VBOXMANAGE%" createvm --name "%VMNAME%" --ostype %OSTYPE% --default --register
"%VBOXMANAGE%" createmedium disk --filename "%userprofile%\VirtualBox VMs\%VMNAME%\%VMNAME%.vdi" --size 65536
"%VBOXMANAGE%" storagectl "%VMNAME%" --name "IDE Controller" --add ide --controller PIIX4 
"%VBOXMANAGE%" storageattach "%VMNAME%" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium "%ISOPATH%%ISONAME%.iso"
"%VBOXMANAGE%" storageattach "%VMNAME%" --storagectl "SATA" --port 0 --device 0 --type hdd --medium  "%userprofile%\VirtualBox VMs\%VMNAME%\%VMNAME%.vdi"
"%VBOXMANAGE%" startvm "%VMNAME%" 
exit
Im obigen Beispiel liegt die Windows 11 ISO im Benutzer - Downloadverzeichnis und es handelt sich um die 25201.1000.Copper-X64-DE-CLIENTPRO.iso hier aus dem Blog (danke an Birkuli!).
VirtualBox ist als 64-bit Version im Standardverzeichnis gespeichert.
Die SET-Variablen können/müssen natürlich angepasst werden.
Wird das cmd-Script gestartet, richtet es die VM ein, schließt virtuelle Festplatte und DVD-Laufwerk an (für die Installations-DVD) und startet dann die VM. Sodann läuft die Windows-Installation an.
Achtung!: man hat nur einige Sekunden Zeit, "Any-Key" zu drücken, damit die Installation von der virtuellen DVD startet.
Wie man ""Press any key to continue" loswird, ist hier beschrieben:
viewtopic.php?p=361517&hilit=vm+press+a ... ue#p361517

Es geht aber auch mehr:
automatische Installation mit UserName, Passwort, Installationskey, Änderung von Speicher und CPU-Anzahl etc. etc.
Dann sieht das Script so aus:

Code: Alles auswählen

SET VBOXMANAGE=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe
SET VMNAME=WIN11
SET OSTYPE=Windows11_64
SET ISOPATH=%homepath%\Downloads\
SET ISONAME=25201.1000.Copper-X64-DE-CLIENTPRO
SET USER=Admin
SET FULLNAME=Deskmodder
SET PASSWORD=Test1234
SET INDEX=1
SET LOCALE=de_DE
SET FORMAT=VDI
SET KEY=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

"%VBOXMANAGE%" createvm --name "%VMNAME%" --ostype %OSTYPE% --default --register
"%VBOXMANAGE%" createmedium disk --filename "%userprofile%\VirtualBox VMs\%VMNAME%\%VMNAME%.vdi" --size 65536 --format %FORMAT%
"%VBOXMANAGE%" storagectl "%VMNAME%" --name "IDE Controller" --add ide --controller PIIX4 
"%VBOXMANAGE%" storageattach "%VMNAME%" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium "%ISOPATH%%ISONAME%.iso"
"%VBOXMANAGE%" storageattach "%VMNAME%" --storagectl "SATA" --port 0 --device 0 --type hdd --medium  "%userprofile%\VirtualBox VMs\%VMNAME%\%VMNAME%.vdi"
"%VBOXMANAGE%" modifyvm "%VMNAME%" --boot1 dvd --boot2 disk --boot3 floppy --boot4 none
rem Speichereinstellungen
"%VBOXMANAGE%" modifyvm "%VMNAME%" --memory 4096 --vram 128
rem Anzahl CPUs
"%VBOXMANAGE%" modifyvm "%VMNAME%" --cpus 2
"%VBOXMANAGE%" unattended install "%VMNAME%" --iso "%ISOPATH%%ISONAME%.iso" --user="%USER%" --full-user-name="%FULLNAME%" --image-index=%INDEX% --locale=%LOCALE% --password "%PASSWORD%" --key "%KEY%" --install-additions
"%VBOXMANAGE%" startvm "%VMNAME%" 

exit
Viel Spaß!!
Anregungen, Verbesserungsvorschläge, Kritiken etc. sind herzlich willkommen.
BTW: das Ganze funktioniert natürlich auch mit Windows 10. Dann SET OSTYPE=Windows10_64 (für 64-bit) bzw. SET OSTYPE=Windows10 (für 32-bit) angeben!
Weiß jemand, ob so etwas in der Art auch mit VMWare Workstation/Player möglich ist?

Nachtrag:
wer die VM mal eben schnell löschen möchte, um den nächsten Test auszuführen, kann mit dem folgenden Script die Löschung automatisiert durchführen:

Code: Alles auswählen

@Echo off
SET VBoxManage=C:\Program Files\Oracle\VirtualBox\VBoxManage.exe
SET VMNAME=WIN11

Echo Achtung! Im folgenden Verlauf wird die Virtuelle Maschine %VMNAME% unwiderruflich geloescht!!
pause
"%VBoxManage%" controlvm "%VMNAME%" poweroff >nul 2>nul
"%VBoxManage%" storageattach "%VMNAME%" --storagectl "SATA" --port 0 --device 0 --type hdd --medium none >nul 2>nul
"%VBoxManage%" closemedium disk "%userprofile%\VirtualBox VMs\%VMNAME%\%VMNAME%.vdi" --delete >nul 2>nul
timeout /t 10
"%VBoxManage%" unregistervm --delete "%VMNAME%" >nul 2>nul
timeout /t 10
rmdir "%homepath%\VirtualBox VMs\%VMNAME%" /s /q >nul 2>nul
exit
nur einmal den Namen bei "SET VMNAME=" ändern
Zuletzt geändert von Holgi am 15.09.2022, 20:14, insgesamt 1-mal geändert.
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Tante Google

VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Tante Google » 15.09.2022, 16:23


Benutzeravatar
g-force
Alleswisser
Alleswisser
Beiträge: 1983
Registriert: 07.10.2016, 19:30
Hat sich bedankt: 268 Mal
Danke erhalten: 236 Mal
Gender:

Re: VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von g-force » 15.09.2022, 20:00

Ein sehr ähnliches Script findet sich auch in "XP2ESD", auch dort wird die VM (VirtualBox) per Script erstellt und gelöscht.

EDIT:

Hier eine komplette Übersicht über die möglichen Parameter: https://www.virtualbox.org/manual/ch08. ... registervm
Windows VISTA x64 - Integration ALLER Updates: viewtopic.php?t=29624
Windows 7 x86/x64 - Integration ALLER Updates: viewtopic.php?t=26485
Windows 8.1 x86/x64 - Integration ALLER Updates: viewtopic.php?t=28193
Windows XP x86/x64 ISO mit allen Updates: viewtopic.php?t=28348
Windows XP x86/x64 - Setup von WIM (XP2ESD): viewtopic.php?t=28372

Benutzeravatar
Holgi
Elite
Elite
Beiträge: 2113
Registriert: 12.05.2018, 12:33
Hat sich bedankt: 207 Mal
Danke erhalten: 273 Mal
Gender:

Re: VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Beitrag von Holgi » 17.09.2022, 16:03

danke g-force für den Hinweis auf XP2ESD und die Infoseite zu VBOXManage.
Die Einstellmöglichkeiten sind sehr umfangreich. Wenn man aber sich nicht 100%ig mit ACPI, OHCI, PAE etc. auskennt, dann ist da schnell mal etwas verstellt und dann geht im Worst Case gar nichts mehr.
Ich bin zu dem Schluss gekommen, dass die meisten Einstellmöglichkeiten am Besten von VirtualBox selbst vorgenommen werden sollten. Die Steuerung hierzu findet über den Schalter "OSTYPE" statt.
Je nach dem, welches BS mit welcher Architektur (X86/X64) dort eingestellt wird, werden mehr oder weniger sinnvolle Voreinstellungen vorgenommen.
Lediglich bei Anzahl der CPUs und Speicher (RAM und VRAM) gehe ich mit VBOX nicht konform.
Ein paar Sachen aus XP2ESD habe ich mal in mein Script übernommen.
Anbei mal ein angepasstes Script für die Windows XP mit modern Setup von g-force (viewtopic.php?t=28372&hilit=modern+xp&start=30#p391958

Code: Alles auswählen

@Echo off
SET VMNAME=WINXP
SET OSTYPE=WindowsXP
SET IMAGEARCH=X86
SET ISOPATH=%homepath%\Downloads\
SET ISONAME=WinXP_ModernSetup_ESD
SET USER=Admin
SET FULLNAME=Deskmodder
SET PASSWORD=Test1234
SET INDEX=1
SET LOCALE=de_DE
SET FORMAT=VDI
SET KEY=XXXXX-XXXXX-XXXXX-XXXXX
SET RAM32=2048
SET RAM64=4096
SET VRAM=128
SET VirtualMachinePath=%userprofile%\VirtualBox VMs\

REM Set host architecture
if exist "%WinDir%\SysWOW64" (
	set ARCH=x64
) else (
	set ARCH=x86
)

if exist "%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe" set "VBOXMANAGE=%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe"
if exist "%ProgramFiles(x86)%\Oracle\VirtualBox\VBoxManage.exe" set "VBOXMANAGE=%ProgramFiles(x86)%\Oracle\VirtualBox\VBoxManager.exe"

if not exist "%VBOXMANAGE%" (

	echo.
	echo  VirtualBox is not installed, please download and install it
	start https://www.virtualbox.org/wiki/Downloads
	echo.
	echo  If you don't have VirtualBox installed in Program Files,
	echo  simply point "VirtualBoxPath" in config.ini with your custom path
	echo.
	pause
	goto :EOF

)

rem alte VM löschen
"%VBOXMANAGE%" controlvm "%VMNAME%" poweroff >nul 2>nul
"%VBOXMANAGE%" unregistervm --delete "%VMNAME%" >nul 2>nul

rem neue VM erstellen

if /i "%ImageArch%" == "X86" (

            "%VBOXMANAGE%" createvm --name "%VMNAME%" --ostype "%OSTYPE%" --default --register >nul 2>nul
) else (

	"%VBOXMANAGE%" createvm --name "%VMNAME%" --ostype "%OSTYPE%_64" --default --register >nul 2>nul
)

"%VBOXMANAGE%" createmedium disk --filename "%VirtualMachinePath%%VMNAME%\%VMNAME%" --size 65536 --format %FORMAT%

"%VBOXMANAGE%" storageattach "%VMNAME%" --storagectl "IDE" --port 0 --device 0 --type hdd --medium  "%VirtualMachinePath%%VMNAME%\%VMNAME%.vdi"

"%VBOXMANAGE%" storageattach "%VMNAME%" --storagectl "IDE" --port 1 --device 0 --type dvddrive --medium "%ISOPATH%%ISONAME%.iso"

"%VBOXMANAGE%" modifyvm "%VMNAME%" --cpus 2

REM Use different minimal amount for x64 systems. Best to keep it really on minimum requirements for capturing images
if /i "%ImageArch%" == "i386" (

	"%VBOXMANAGE%" modifyvm "%VMNAME%" --memory "%RAM32%" --vram "%VRAM%" >nul 2>nul
	
) else (

	"%VBOXMANAGE%" modifyvm "%VMNAME%" --memory "%RAM64%" --vram "%VRAM%" >nul 2>nul
	
)

"%VBOXMANAGE%" startvm "%VMNAME%" 

exit
PDF24 angepasste Installation (nur PDF Druckertreiber) per Script: viewtopic.php?t=30284
Winget (Desktop App Installer) für Windows Versionen ohne Store installieren (HowTo): viewtopic.php?t=26214
Vorstellung: tiny11builder; Script zur Verschlankung von Windows 11: viewtopic.php?t=30134
Windows StartMenü Empfohlen (Recommended Section) komplett ausblenden: viewtopic.php?t=30574
Hyper-V VM per Script erstellen viewtopic.php?t=25114

Antworten