Booting a Windows 7 VHD or Windows Server 2008 R2 from VHD

This feature is only supported by the Windows 7 client VHD and Windows Server 2008 R2 VHD.

In order to boot from VHD we need to prepare the VHDs using any of the two methods.

  1. The first method is obtaining the existing Windows 7 or Windows Server 7 DVD VHD and make sure it is sysprepped to clear all the hardware information. So why sysprep ?

    Benefits of Sysprep

    Sysprep provides the following benefits:

    • Removes system-specific data from Windows. Sysprep can remove all system-specific information from an installed Windows image, including the computer security identifier (SID). The Windows installation can then be captured and installed throughout an organization.
    • Configures Windows to boot to Audit mode. Audit mode enables you to install third-party applications and device drivers, as well as to test the functionality of the computer.
    • Configures Windows to boot to Windows Welcome. Configures a Windows installation to boot to Windows Welcome the next time the computer starts. In general, you configure a system to boot to Windows Welcome immediately before delivering the computer to a customer.
    • Resets Windows Product Activation. Sysprep can reset Windows Product Activation up to three times.

    For more information about sysprep visit How sysprep works ? and What is Sysprep ? that will give you clear idea about sysprepping a system.

  2. Applying a WIM Image directly to the VHD file using ImageX utility. The ImageX utility can be used to extract the required operating system edition directly to the attached VHD file in Windows 7

The ImageX utility is part of WAIK. i.e. Windows Automated Installation Kit. You can download the WAIK for Windows 7 from here

Preparing VHD file using Windows 7 or Windows Server 7 Media or existing VHD running in Hyper-V


From my previous post create a new VHD and attach it using Disk Management. Now, you will have newly attached X: created with label ‘Windows7’, which is of size 20 GB.

Now, you will require the ‘install.wim’ file from the Windows 7 Media or Windows Server 7 Media. Along with that we will require ImageX utility.

In order to extract image to the X: we will use the following syntax.



d:imagex>imagex /apply d:install.wim 1 x:

In the above syntax we can see we have used ‘d:install.wim’ followed by ‘1′ and ‘X:’ (this is the attached VHD.)  Now this 1 denotes Image Index i.e. edition of the Operating System.

As you can see I have used the ‘install.wim’ file from the Media of Windows Server 7 Beta and 1 denotes Enterprise Edition.

In order to check the Image Index we will use the following command

d:imagex>imagex /info “d:DownloadWindows Server 7 R2install.wim” (i.e. the location of the install.wim file)


Once finished the extracting the OS using ImageX it will look like this


Once the image is applied to particular drive in our case X:. Detach the X: Drive from the Disk Management. Now your VHD file is ready to boot.


Preparing the VHD file using Windows Server 2008 Hyper-V

If you have Windows Server 2008 running Hyper-V, launch the virtual machine running Windows 7 or Windows Server 7 aka Windows Server 2008 R2 and the run the following command

c:windowssystem32sysprep>sysprep /generalize /shutdown


After running the above command in the virtual machine, this will launch the System Preparation Tool 3.14. Select the checkbox for ‘Generalize’ and click on OK.

Once the sysprep is completed the virtual machine will be shutdown and ready for booting. You can copy that VHD now.

Note: Sysprep does not work on upgrade. You need to have Clean Installed Windows 7


Adding the VHD Entry in Boot Menu and then Boot from VHD

Now that we have successfully created VHD files. The last step is adding boot entry for the VHD file in your Windows 7 or Windows Server 7 using BCDEdit.exe tool.

For this step open the Elevated Command Prompt with Administrator Privileges and type the following commands.

C:>bcdedit /copy {current} /d “My New VHD Description”

Note: This will Return the GUID of the Loader Object that you will use to replace <guid> below
C:>bcdedit /set <guid> device vhd=[driveletter:]<directory><vhd filename>
C:>bcdedit /set <guid> osdevice vhd=[driverletter:]<directory><vhd filename>

Note: vhd=[driveletter:]<directory><vhd filename> is the new syntax supported for BCDEdit.exe to locate VHD File and Bootmgr will locate the partition containing the VHD File to boot from.
C:>bcdedit /set <guid> detecthal on


Following is the attached screenshot of the my machine. In this case I have Windows 7 as the default OS and I have added the VHD File in the Boot Entry.


Well just after that run the following command to test if your boot entry is successfully created using C:>bcdedit /v



Similarly, if you want to add multiple VHDs into Boot entry you can use the following lines to the command prompt

C:>bcdedit /copy {current} /d “New VHD Description”
C:>bcdedit /set <guid> device vhd=[driveletter:]<directory><vhd filename>
C:>bcdedit /set <guid> osdevice vhd=[driverletter:]<directory><vhd filename>
C:>bcdedit /set <guid> detecthal on

Note:  detecthal is used to force windows to auto detect the Hardware Abstraction Layer.

If you want to delete any existing VHD entry from the Boot Menu you can always use the command C:>bcdedit /delete <guid> /cleanup This deletes the specified operating system entry from the store and removes the entry from the display order.

Well, we are ready to Boot from VHD. Once you restart the computer you will see additional entry in Boot Menu along with the default Windows 7 or Windows Server 7 OS.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts


Collect Computer Information From Active Directory– PowerShell Script

This PowerShell script can be used to collect computer information from Active Directory.   I am searching only Windows XP and Windows 7 machines.  You can update these values  by modifying $OS1 and $OS2 variables. $OS1 Read more…


PowerShell – Tips, Tricks and Useful Commands

Tip #4 –   #4                       Tip #3 – Comparison Operators Published date – May12, 2013 -eq   -ne   -gt   -ge   -lt Read more…


PowerShell TTUC #13 – Scheduled Jobs

PowerShell Tips, Tricks and Useful Commands (TTUC) #13 – Scheduled Jobs PowerShell scripts can be run as a scheduled job using using Windows scheduler.  Create a batch file with the following syntax/commands:   Powershell.exe “c:scriptsmytestscript.ps1” Read more…