Booting Windows PE

Windows AIK installation screen

Overview

Windows Preinstallation Environment (WinPE) is a network-bootable version of Windows designed for installation, troubleshooting or system recovery. It is not a general-purpose Windows system; it can be used only for these specific tasks. If you want to boot a fully functional version of Windows, you need to Boot from SAN instead.

Obtaining Windows AIK

Windows PE is available as part of the Windows Automated Installation Kit (AIK). Download the AIK from its home page at http://www.microsoft.com/downloads/details.aspx?FamilyID=94BB6E34-D890-4932-81A5-5B50C657DE08&displaylang=en, or from the direct download at http://download.microsoft.com/download/9/c/d/9cdfa30e-5901-40e4-b6bf-4a0086ea0a6a/6001.18000.080118-1840-kb3aikl_en.iso.

Install the AIK onto a working Windows system (the “technician computer”). The installation requires around 1GB of disk space.

Setting up WinPE

Open the Windows PE Tools Command Prompt (StartAll ProgramsMicrosoft Windows AIKWindows PE Tools Command Prompt) and enter the following commands (some of which are case-sensitive). Note that if you intending to install a 64 bit version of Windows, the second command below should specify “amd64” instead of “x86” (amd64 is a generic reference to 64 bit support which includes support for both AMD and Intel based 64bit hardware):

  mkdir C:\Temp
  call copype.cmd x86 C:\Temp\Boot
  del /Q etfsboot.com
  move ISO\boot\boot.sdi boot.sdi
  rmdir /S /Q ISO
  imagex /mount winpe.wim 1 mount
  copy mount\Windows\Boot\PXE\pxeboot.n12 pxeboot.n12
  copy mount\Windows\Boot\PXE\bootmgr.exe bootmgr.exe
  copy mount\Windows\System32\bcdedit.exe bcdedit.exe
  imagex /unmount mount
  rmdir /Q mount
  bcdedit -createstore BCD
  set BCDEDIT=bcdedit -store BCD
  %BCDEDIT% -create {ramdiskoptions} -d "Ramdisk options"
  %BCDEDIT% -set {ramdiskoptions} ramdisksdidevice boot
  %BCDEDIT% -set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
  for /f "tokens=3" %a in ('%BCDEDIT% -create -d "Windows PE" -application osloader') do set GUID=%a
  %BCDEDIT% -set %GUID% systemroot \Windows
  %BCDEDIT% -set %GUID% detecthal Yes
  %BCDEDIT% -set %GUID% winpe Yes
  %BCDEDIT% -set %GUID% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
  %BCDEDIT% -set %GUID% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
  %BCDEDIT% -create {bootmgr} -d "Windows Boot Manager"
  %BCDEDIT% -set {bootmgr} timeout 30
  %BCDEDIT% -set {bootmgr} displayorder %GUID%
  del /Q bcdedit.exe

Note: When using inside a batch file, replace %a with %%a (twice) in the “for” command parameters.

Transferring WinPE to a TFTP server

Copy the C:\Temp\Boot directory to your TFTP server. The Boot directory must appear directly within your TFTP server's root. For example, if your TFTP server is running on a Linux system and the TFTP server root is /var/lib/tftpboot, then the C:\Temp\Boot directory must be copied as /var/lib/tftpboot/Boot.

Several of the filenames are case-sensitive, and you must ensure that the case is preserved when you copy the files. Assuming that your TFTP server root is /var/lib/tftpboot, the filenames should appear as:

  • /var/lib/tftpboot/Boot
  • /var/lib/tftpboot/Boot/pxeboot.n12
  • /var/lib/tftpboot/Boot/bootmgr.exe
  • /var/lib/tftpboot/Boot/BCD
  • /var/lib/tftpboot/Boot/winpe.wim
  • /var/lib/tftpboot/Boot/boot.sdi

Configuring DHCP and TFTP

Configure your DHCP server to hand out “\Boot\pxeboot.n12” as the boot filename.

For ISC DHCPD, you can do this by adding the following to /etc/dhcpd.conf.

  next-server XXX.XXX.XXX.XXX;
  filename "\\Boot\\pxeboot.n12";

where the next-server details either the IP address or DNS hostname of your TFTP server.

Note that you must use a backslash (\) as the path separator, rather than the more usual forward slash (/). If you use a forward slash, pxeboot.n12 will be unable to locate bootmgr.exe and the boot will fail. Your TFTP server must be configured to support the use of backslashes as path separators; see Supporting broken TFTP clients for instructions on configuring your TFTP server to do this. Note also that each backslash is doubled within /etc/dhcpd.conf; this is because ISC DHCPD treats a backslash as an escape character.

For Microsoft DHCP Server, set the following options

  Option Number       Option Name           Value
  066                 Boot Server           XXX.XXX.XXX.XXX
  067                 Bootfile Name         boot\pxeboot.n12

where option 66 refers to your TFTP server's IP address or DNS hostname.

Booting WinPE

Boot your diskless client using gPXE. If all has gone well, you should see it boot from your WinPE image. It takes quite a long time, since WinPE downloads over 160MB of data via TFTP and also seems to occasionally spend several minutes sitting at a blank screen apparently doing nothing.

Windows PE booted via gPXE

Congratulations on a successful boot of Windows PE!