VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smileys
:) ;) :smile: :lol: :hihi: :D :rofl: :muahah: :( :pff: :kopfstreichel: :ohno: :betruebt: :heulen: :kopfkratz: :duckundweg: :o :? :oops: :psst: :sauer: :-P :daumenrunter: :daumen: :dankeschoen: :thx: :dafür: :gähn:
Mehr Smileys anzeigen

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

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

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

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

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

VirtualBox Virtuelle Maschine per Script erstellen; mein Lösungsansatz

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

Nach oben