Mounting VHDs in Windows 7 from a command-line script
Windows 7 has native support for VHDs (virtual hard disks) built into the OS. VHDs are great for virtual machines, native VHD booting into recent Windows OSs, or even moving whole file systems around.
While you can mount VHDs from the Windows 7 diskmgmt.msc GUI, or via vhdmount, if you need support for mounting or unmounting VHDs from the command-line on a vanilla Windows 7 / Server 2008 install, you have to use diskpart.
diskpart’s mount commands are pretty simple:
C:\> diskpart DISKPART> sel vdisk file="[location of vhd]" DISKPART> attach vdisk
Unmounting is just as simple:
C:\> diskpart DISKPART> sel vdisk file="[location of vhd]" DISKPART> detach vdisk
These commands work fine on an ad-hoc basis, but I had the need to automate loading a VHD from a script. Luckily, diskpart takes a single parameter, /s, which specifies a diskpart “script”. The script is simply the command you would have typed in above:
C:\> diskpart /s [diskpart script file]
I’ve created two simple scripts, MountVHD.cmd and UnmountVHD.cmd that create a “diskpart script”, run it, then remove the temporary file. This way, you can simply run MountVHD.cmd and point it to your VHD:
C:\> MountVHD.cmd [location of vhd] [drive letter - optional]
Or unmount the same VHD:
C:\> UnMountVHD.cmd [location of vhd]
These files are hosted at Gist.Github if you want to use them or contribute changes.