[BATCH] VBOX VirtualMachine Installer by Elektro H@cker

Iniciado por Eleкtro, 15 Agosto 2012, 19:47 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Este script sirve para auto-instalar una máquina virtual en VirtualBox, Sin necesidad de abrir el programa y darle al botón de "Máquina > Agregar".

La idea del script es automatizar la tarea de instalar una máquina clonada, en otros equipos (Por ejemplo).

Instrucciones:
1º - Hacer un backup de una máquina virtual o Clonar una máquina virtual en una carpeta.
2º - Meter este script en la carpeta junto a los archivos de la máquina clonada (máquina.vbox, disco.vhd, script.bat , etc...)
3º - Ejecutar el script.

PD: Cada vez hago scripts más raros :xD

EDITO: Bug corregido
Nueva versión

Código (dos) [Seleccionar]
@Echo OFF
Title VBOX VirtualMachine Installer by Elektro H@cker v0.3
REM Testeado con la versión 4.1.18 de VirtualBox
Color 07

Echo.
Echo: VBOX VirtualMachine Installer  by Elektro H@cker
Echo: _____________________________  _________________ | MORE

:: Comprueba si existe VirtualBOX en el sistema.
REG Query "HKEY_CURRENT_USER\Software\Oracle\VirtualBox\Install" | Find /I "installed" >NUL 2>&1 || (
Echo La operaci¢n se ha cancelado porque VirtualBox no est... instalado en este PC. | MORE
Timeout /T 10 || (Pause)
Exit /B 1
)

:: Comprueba si existe el archivo de configuración de VirtualBox, De lo contrario, Crea el archivo por defecto.
If Not Exist "%USERPROFILE%\.VirtualBox\VirtualBox.xml" (
(
Echo ^<?xml version="1.0"?^>
Echo ^<!--
Echo ** DO NOT EDIT THIS FILE.
Echo ** If you make changes to this file while any VirtualBox related application
Echo ** is running, your changes will be overwritten later, without taking effect.
Echo ** Use VBoxManage or the VirtualBox Manager GUI to make changes.
Echo --^>
Echo ^<VirtualBox xmlns="http://www.innotek.de/VirtualBox-settings" version="1.12-windows"^>
Echo   ^<Global^>
Echo     ^<ExtraData^>
Echo       ^<ExtraDataItem name="GUI/DetailsPageBoxes" value="general,system,preview,display,storage,audio,network,usb,sharedFolders,description"/^>
Echo       ^<ExtraDataItem name="GUI/LastWindowPosition" value="575,245,770,550"/^>
Echo       ^<ExtraDataItem name="GUI/SplitterSizes" value="302,463"/^>
Echo       ^<ExtraDataItem name="GUI/UpdateCheckCount" value="2"/^>
Echo       ^<ExtraDataItem name="GUI/UpdateDate" value="1 d, 2012-08-17, stable, 4.1.18"/^>
Echo     ^</ExtraData^>
Echo     ^<MachineRegistry/^>
Echo     ^<MediaRegistry^>
Echo       ^<HardDisks/^>
Echo       ^<DVDImages/^>
Echo       ^<FloppyImages/^>
Echo     ^</MediaRegistry^>
Echo     ^<NetserviceRegistry^>
Echo       ^<DHCPServers^>
Echo         ^<DHCPServer networkName="HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter" IPAddress="192.168.56.100" networkMask="255.255.255.0" lowerIP="192.168.56.101" upperIP="192.168.56.254" enabled="1"/^>
Echo       ^</DHCPServers^>
Echo     ^</NetserviceRegistry^>
Echo     ^<SystemProperties defaultMachineFolder="C:\Users\Administrador\VirtualBox VMs" defaultHardDiskFormat="VDI" VRDEAuthLibrary="VBoxAuth" webServiceAuthLibrary="VBoxAuth" LogHistoryCount="3"/^>
Echo     ^<USBDeviceFilters/^>
Echo   ^</Global^>
Echo ^</VirtualBox^>
) > "%USERPROFILE%\.VirtualBox\VirtualBox.xml"
)

:: Elimina el archivo temporal (Si existiera).
Del /Q "%userprofile%\.VirtualBox\virtualbox.xml.tmp" 2>NUL

For /R %%@ in (*.vbox) DO (

:: Obtiene el nombre de la máquina virtual.
Set "Name=%%~n@"
Call Echo M...quina virtual encontrada: "%%NAME%%" | MORE

:: Obtiene el Machine UUID de la máquina virtual.
For /F "Tokens=2 Delims={}" %%A in ('Type "%%@" ^| Find /I "Machine uuid"') Do (Set "Machine_UUID={%%A}")

:: Obtiene el HardDisk UUID de la máquina virtual.
For /F "Tokens=2 Delims={}" %%A in ('Type "%%@" ^| Find /I "HardDisk uuid"') Do (Set "HardDisk_UUID={%%A}")

:: Obtiene el formato del disco duro virtual.
For /F "Tokens=4 Delims==" %%A in ('Type "%%@" ^| Find /I "HardDisk uuid="') Do (Set "DISK=%%A"))
Set "DISK=%DISK:~1,3%"
)

:: Obtiene el directorio por defecto de las máquinas virtuales de VBOX.
For /F tokens^=2^ delims^=^" %%A in ('Type ^"%USERPROFILE%\.VirtualBox\VirtualBox.xml^" ^| Find /I ^"defaultMachineFolder^"') Do (Set "FOLDER=%%A") & REM "

:: Comprueba si esta máquina ya está instalada.

Type "%userprofile%\.VirtualBox\virtualbox.xml" | find "%Machine_UUID%" >NUL 2>&1
IF NOT %ERRORLEVEL% EQU 0 (Goto :COPY)

Echo La m...quina virtual "%NAME%" ya existe. | MORE
Choice /M "¨Desea reemplazar la m...quina virtual?"
If "%ERRORLEVEL%" EQU "1" (Set "Replace=SI") ELSE (
Echo La operaci¢n se ha cancelado.
Timeout /T 5 || (Pause)
Exit
)

:: Copia la máquina virtual al directorio de destino.
:COPY
Echo Copiando los archivos de la m...quina virtual "%NAME%"... | MORE
MKDIR "%FOLDER%\%NAME%\" 2>NUL
For /R %%@ in (*.vbox*) DO (Echo Copiando %%~nx@ & copy "%%@" "%FOLDER%\%NAME%\" >NUL)
For /R %%@ in (*.%DISK%) DO (Echo Copiando %%~nx@ | MORE & copy "%%@" "%FOLDER%\%NAME%\" >NUL)
If defined REPLACE (GOTO :FIN)

:: Comprueba si esta será la primera máquina virtual que instalaremos, O ya existen más máquinas virtuales instaladas en VirtualBox.
type "%userprofile%\.VirtualBox\virtualbox.xml" | find "<MachineRegistry>" >NUL 2>&1 && (
Set "FirstMachine=NO"
For /F "tokens=1 delims=:" %%X in ('type "%userprofile%\.VirtualBox\virtualbox.xml" ^| findstr /N "<MachineRegistry>"')  Do (Set Line=%%X)
) || (
Set "FirstMachine=YES"
For /F "tokens=1 delims=:" %%X in ('type "%userprofile%\.VirtualBox\virtualbox.xml" ^| findstr /N "<MachineRegistry/>"') Do (Set Line=%%X)
Set /A Line-=1
)
Set /A LastLine=LINE+1

:: Modifica el archivo de configuración de VirtualBox agregando las lineas necesarias.
For /F "tokens=*" %%# in ('type "%userprofile%\.VirtualBox\virtualbox.xml"') Do (
Echo %%# >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
Call :Next
)

:Next
Set /A Next+=1
IF "%NEXT%" EQU "%LINE%" (
IF "%FirstMachine%" EQU "NO" (
Echo ^<MachineEntry uuid="%Machine_UUID%" src="%FOLDER%\%NAME%\%NAME%.vbox"/^> >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
Type "%userprofile%\.VirtualBox\virtualbox.xml" | MORE +%LINE% >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
) ELSE (
Echo ^<MachineRegistry^> >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
Echo ^<MachineEntry uuid="%Machine_UUID%" src="%FOLDER%\%NAME%\%NAME%.vbox"/^> >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
Echo ^</MachineRegistry^> >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
Type "%userprofile%\.VirtualBox\virtualbox.xml" | MORE +%LASTLINE% >> "%userprofile%\.VirtualBox\virtualbox.xml.tmp"
)
Move /Y "%userprofile%\.VirtualBox\virtualbox.xml.tmp" "%userprofile%\.VirtualBox\virtualbox.xml" >NUL
Goto :FIN
)
Goto :EOF

:FIN
Echo La m...quina virtual "%NAME%" se ha instalado satisfact¢riamente.
Timeout /T 5 || (Pause)
Exit








Karcrack

Me lo añado a marcadores puede serme muy útil en el futuro. Gracias :)

Danyfirex

Esta muy Bueno el Código, Gracias  ;-). voy a estudiarlo  a fondo.