Montar, desmontar y compactar VHDs desde Windows Explorer
Hola
Para los que hayáis echado de menos en Hyper-V el comando VHDMount.exe que incorporaba Virtual Server 2005 R2 SP1, aquí va un pequeño truco que os puede facilitar la vida cuando se trabaja con máquinas virtuales con el hypervisor de Windows Server 2008.
Lo he hecho mediante un script de powershell, pero se puede hacer también con VBScript (basta utilizar como base este artículo de The Virtual PC Guy). Se trata de lograr que nos aparezca lo siguiente cuando se hace clic con el botón derecho en un fichero .vhd:
MountVHD.ps1:
Primeramente, el script de powershell que monta, desmonta o compacta un .vhd. Lógicamente, puede usarse también desde la consola de powershell:
$VHDService = get-wmiobject -class "Msvm_ImageManagementService" -namespace "root\virtualization" -computername "."
if($args[1] -eq "Mount"){$Result = $VHDService.Mount($args[0])}
elseif($args[1] -eq "UnMount"){$Result = $VHDService.UnMount($args[0])}
elseif($args[1] -eq "Compact"){$Result = $VHDService.CompactVirtualHardDisk($args[0])}
El script acepta dos parámetros. El primero es el path completo al .vhd y el segundo es la acción a llevar a cabo, que puede ser Mount, UnMount o Compact. Por ejemplo:
- PS> mountvhd c:\VirtualMachines\server1.vhd Mount
- PS> mountvhd c:\VirtualMachines\server1.vhd UnMount
- PS> mountvhd c:\VirtualMachines\server1.vhd Compact
NOTA: Para que esto funcione, será necesario tener una política de ejecución en powershell que permita la correcta ejecución de scripts (p.e set-executionpolicy unrestricted).
VHDfile.reg:
Lo segundo es meter las entradas necesarias en el registo para que la UI nos muestre las opciones deseadas al hacer clic con el botón derecho del ratón sobre un .vhd:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.vhd]
@="vhdfile"
[HKEY_CLASSES_ROOT\vhdfile]
@="Virtual Hard Disk"
[HKEY_CLASSES_ROOT\vhdfile\shell]
@="Mount"
[HKEY_CLASSES_ROOT\vhdfile\shell\Mount]
[HKEY_CLASSES_ROOT\vhdfile\shell\Mount\command]
@="powershell mountvhd '%1' Mount"
[HKEY_CLASSES_ROOT\vhdfile\shell\UnMount]
[HKEY_CLASSES_ROOT\vhdfile\shell\Unmount\command]
@="powershell mountvhd '%1' UnMount"
[HKEY_CLASSES_ROOT\vhdfile\shell\Compact]
[HKEY_CLASSES_ROOT\vhdfile\shell\Compact\command]
@="powershell mountvhd '%1' Compact"
Tras importar este .reg, ya tendremos las opciones Mount, Compact y UnMount disponibles en la interfaz gráfica. Dado que la opción por defecto es "Mount", eso es lo que sucederá si hacemos doble clic sobre un .vhd
Algunas consideraciones importantes:
- Si MountVHD.ps1 no está en unca carpeta incluida en el path del sistema, será necesario incluir su path completo en el .reg
- Cuando se monta un .vhd, no aparece necesariamente una letra de unidad asociada en el Explorador, ya que el disco estará offline. Es necesario ir al Disk Management y ponerlo online a mano.
- La operación de compactar no muestra interfaz gráfica alguna. Es necesario fijarse en cuando desaparece la unidad que se asocia en el explorador, y tener la precaudicón de no hacer ninguna operación con ese disco ni intentar desmontarlo mientras dure el proceso.
- Algo similar a esto puede lograrse con Virtual Server 2005 R2 SP1. Más información aquí
Si tengo un rato buscaré la manera de incorporar algunas mejoras al script.
Saludos
Comments
Anonymous
January 01, 2003
Corregido un pequeño "bug" que hacia que no funcionara con ficheros con espacios en el nombre. Bastaba cambiar %1 por '%1' en las entradas del registro Gracias AngelAnonymous
October 26, 2008
Muy bueno el script. Funciona a la perfección. SaludosAnonymous
December 23, 2008
Excelente script, me ayudo mucho para los virtuales que administramos Saludos