====== Booting Windows PE ====== {{:screenshots:windows_aik.png?303×222 |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 [[:sanboot|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 (//Start// -> //All Programs// -> //Microsoft Windows AIK// -> //Windows 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. {{ :warning.png}} 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 [[:tftp_backslash|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. {{ :screenshots:winpe.png?400x300 |Windows PE booted via gPXE}} Congratulations on a successful boot of Windows PE!