@echo off
@rem This script is called by x:\Windows\System32\Startnet.cmd – WinPE
@echo.
@echo.
@echo.
@echo Running Intel Optimization powercfg for improved imaging times
@echo.
@echo call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
@echo.
@echo *****************************************************************
@echo Map drive letter for inside eMMC/SATA
@echo *****************************************************************
@echo.>x:\Disks.txt
@echo list disk >>x:\Disks.txt
@echo exit >>x:\Disks.txt
call diskpart /s x:\Disks.txt>x:\listdisk.txt
if %errorlevel% NEQ 0 set ErrorInfo="Fail to list disk" && goto :Error
for /f "skip=1 tokens=2" %%i in ('type x:\listdisk.txt ^| find "Disk"') do (
@echo select disk %%i >x:\DetailDisk.txt
@echo detail disk >>x:\DetailDisk.txt
@echo exit >>x:\DetailDisk.txt
diskpart /s x:\DetailDisk.txt>x:\DiskInfo.txt
for /f "tokens=3" %%a in ('type x:\DiskInfo.txt ^| find "Type :"') do (
@echo Disk type:%%a
@rem map eMMC disk and first use it
if "%%a"=="SD" (
set Disk=%%i
@rem Exclude MicroSD card
type x:\DiskInfo.txt | find /i "removable" || goto :ShowDisk
type x:\DiskInfo.txt | find /i "sd card" || goto :ShowDisk
)
@rem map ssd disk
if "%%a"=="SATA" set Disk=%%i
)
)
:ShowDisk
set Disk
if %Errorlevel% NEQ 0 set ErrorInfo="NOT found inside disk!" && goto :Error
@echo Using Disk "%Disk%"
@rem *****************************************************************
@rem Detect if System is booted into UEFI mode or Bios mode
@rem *****************************************************************
@echo.
@echo The PC is booted in UEFI mode
@echo.>x:\winpart.txt
@echo select disk "%Disk%">>x:\winpart.txt
@echo clean>>x:\winpart.txt
@echo convert gpt>>x:\winpart.txt
@echo create partition efi size=100>>x:\winpart.txt
@echo format quick fs=fat32 label="System">>x:\winpart.txt
@echo assign letter="S">>x:\winpart.txt
@echo create partition msr size=16>>x:\winpart.txt
@echo create partition primary>>x:\winpart.txt
@echo format quick fs=ntfs label="Windows">>x:\winpart.txt
@echo assign letter="W">>x:\winpart.txt
@echo shrink desired=900>>x:\winpart.txt
@echo create partition primary>>x:\winpart.txt
@echo format quick fs=ntfs label="Recovery">>x:\winpart.txt
@echo assign letter="R">>x:\winpart.txt
@echo set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac">>x:\winpart.txt
@echo gpt attributes=0×8000000000000001>>x:\winpart.txt
@echo exit>>x:\WinPart.txt
Goto :WINPARTSECTION
:WINPARTSECTION
@echo Winpart.txt now contains…..
@echo.
type x:\winpart.txt
@echo.
@echo.
@echo *****************************************************************
@echo Setting up the partition table
@echo *****************************************************************
@echo call diskpart /s x:\winpart.txt
diskpart /s x:\winpart.txt
@echo.
@echo.
@echo *****************************************************************
@rem Map drive letter for Install.wim
@echo *****************************************************************
@echo.>x:\ListVol.txt
@echo List volume>>x:\ListVol.txt
@echo exit>>x:\ListVol.txt
@echo call diskpart /s x:\ListVol.txt
call diskpart /s x:\ListVol.txt>x:\Output.txt
@echo.
@echo.
@rem Go through each drive letter, looking for the images\Install.txt file
for /f "skip=8 tokens=3" %%A in (x:\Output.txt) do (
if exist %%A:\images\install.txt set InstallPath=%%A:\images&& echo "Found device with images folder and install.txt file"
)
@echo.
@echo.
@rem Check InstallPath was found and there are images in it.
if NOT EXIST %InstallPath%\Install.swm echo "Install.swm NOT found." && goto :Error
@echo Install.wim FOUND at %InstallPath%\images\install.wim
@echo.
@echo.
@echo Making directories…
md w:\recycler\scratch
if %errorlevel% NEQ 0 echo "Failed to make w:\recycler\scratch directory" && goto :error
@echo.
md r:\recovery\windowsre
if %errorlevel% NEQ 0 echo "Failed to make m:\recovery\windowsre directory" && goto :error
@echo.
@echo *****************************************************************
@echo Applying the Windows image from the USB
@echo *****************************************************************
@echo call DISM /Apply-Image /ImageFile:%InstallPath%\install.wim /Index:1 /ApplyDir:w:\ /Compact /ScratchDir:w:\recycler\SCRATCH
call DISM /Apply-Image /ImageFile:%InstallPath%\install.swm /SwmFile:%InstallPath%\install*.swm /Index:1 /ApplyDir:w:\ /Compact /ScratchDir:w:\recycler\SCRATCH
if %errorlevel% NEQ 0 echo "Failed to apply image to w:" && goto :error
@echo.
@echo.
@echo *****************************************************************
@rem Move WinRE to Recovery Partition
@echo *****************************************************************
@echo.
@echo Modifying attributes of winre.wim so we can move it.
@echo copy %InstallPath%\winre.wim r:\recovery\windowsre
copy %InstallPath%\winre.wim r:\recovery\windowsre
if %errorlevel% NEQ 0 echo "Failed to move winre.wim to r:\recovery\windowsre" && goto :error
@echo.
@echo reset attributes now
attrib r:\Recovery\Windowsre\winre.wim +s +h +a +r
@echo.
@echo.
@echo *****************************************************************
@echo Setting the boot environment
@echo *****************************************************************
@echo call w:\WINDOWS\SYSTEM32\BCDBOOT w:\WINDOWS /s s: /f all
w:\WINDOWS\SYSTEM32\BCDBOOT w:\WINDOWS /s s: /f all
if %errorlevel% NEQ 0 echo "Failed to set boot information" && goto :error
@echo.
@echo.
@echo.
@echo *****************************************************************
@echo Setting the recovery environment
@echo *****************************************************************
@echo w:\windows\system32\reagentc /SetREImage /Path r:\RECOVERY\WINDOWSRE /target w:\windows
w:\windows\system32\reagentc /SetREImage /Path r:\RECOVERY\WINDOWSRE /target w:\windows
if %errorlevel% NEQ 0 echo "Failed to set recovery information" && goto :error
@echo.
@echo *****************************************************************
@echo Setting the recovery winre boot environment
@echo *****************************************************************
mkdir S:\EFI\Recovery
xcopy /e /h S:\EFI\Microsoft\* S:\EFI\Recovery\
del /a S:\EFI\Recovery\Boot\BCD
del /a S:\EFI\Recovery\Boot\BCD.LOG
bcdedit /createstore S:\EFI\Recovery\Boot\BCD
if %errorlevel% NEQ 0 echo "Failed to set recovery information in efi" && goto :error
bcdedit /store S:\EFI\Recovery\Boot\BCD /create {bootmgr} /d "Windows Boot Manager"
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {bootmgr} device partition=S:
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {bootmgr} locale en-US
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {bootmgr} integrityservices Enable
if %errorlevel% NEQ 0 echo "Failed to set recovery information in efi" && goto :error
bcdedit /store S:\EFI\Recovery\Boot\BCD /create {11111111-1111-1111-1111-111111111111} /d "Windows Recovery" /device
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {11111111-1111-1111-1111-111111111111} ramdisksdidevice partition=R:
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {11111111-1111-1111-1111-111111111111} ramdisksdipath \Recovery\WindowsRE\boot.sdi
if %errorlevel% NEQ 0 echo "Failed to set recovery information in efi" && goto :error
bcdedit /store S:\EFI\Recovery\Boot\BCD /create {22222222-2222-2222-2222-222222222222} /d "Windows Recovery Environment" /application osloader
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {bootmgr} default {22222222-2222-2222-2222-222222222222}
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {bootmgr} displayorder {22222222-2222-2222-2222-222222222222}
if %errorlevel% NEQ 0 echo "Failed to set recovery information in efi" && goto :error
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} device ramdisk=[R:]\Recovery\WindowsRE\winre.wim,{11111111-1111-1111-1111-111111111111}
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} path \Windows\System32\winload.efi
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} locale en-US
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} displaymessage "Recovery"
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} osdevice ramdisk=[R:]\Recovery\WindowsRE\winre.wim,{11111111-1111-1111-1111-111111111111}
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} systemroot \Windows
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} nx OptIn
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} bootmenupolicy Standard
bcdedit /store S:\EFI\Recovery\Boot\BCD /set {default} winpe Yes
if %errorlevel% NEQ 0 echo "Failed to set recovery information in efi" && goto :error
@echo.
@echo *****************************************************************
@echo Setting the recovery winre boot environment end
@echo *****************************************************************
@echo w:\windows\system32\reagentc /SetREImage /Path r:\RECOVERY\WINDOWSRE /target w:\windows
w:\windows\system32\reagentc /SetREImage /Path r:\RECOVERY\WINDOWSRE /target w:\windows
if %errorlevel% NEQ 0 echo "Failed to set recovery information" && goto :error
@echo.
@echo.
dism /Apply-CustomDataImage /ImagePath:w:\ /CustomDataImage:w:\Recovery\Customizations\usmt.ppkg /SingleInstance
@echo.
@echo *****************************************************************
@echo Copying over Unattend.xml to use on factory floor if it exists
@echo *****************************************************************
@echo if EXIST %WinPESource%Scripts\Unattend.xml copy %WinPESource%Scripts\Unattend.xml w:\Windows\Panther /y
if EXIST %WinPESource%Scripts\Unattend.xml copy %WinPESource%Scripts\Unattend.xml w:\Windows\Panther /y
@echo.
@echo *****************************************************************
@echo Copying over NON Scanstate Packages, if they exist.
@echo IF YOU COPY OVER SCANSTATE PPKG, THIS CAUSE IMAGE TO FAIL DURING RECOVERY
@echo *****************************************************************
reg load HKU\DEFAULTTEMP w:\users\default\ntuser.dat
reg add HKU\DEFAULTTEMP\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /v {20D04FE0-3AEA-1069-A2D8-08002B30309D} /d 00000000 /t REG_DWORD /f
reg add HKU\DEFAULTTEMP\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /v {5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0} /d 00000000 /t REG_DWORD /f
reg unload HKU\DEFAULTTEMP
reg load HKLM\test w:\windows\system32\config\software
REG ADD "HKLM\test\SOFTWARE\Intel\KMD" /v HighInverterPWMFreq /t REG_DWORD /d 00000001 /f
reg unload HKLM\test
@echo.
@echo.
xcopy "%WinPESource%TEST_TOOL"\*.* w:\TEST_TOOL\ /cherky
xcopy "%WinPESource%OA30_TOOL"\*.* w:\ /cherky
xcopy %WinPESource%OEM w:\recovery /s /y
@echo.
xcopy w:\recovery\OEM\Scripts\OEMBackground.jpg w:\Windows\web\wallpaper /y
xcopy w:\Recovery\OEM\scripts\Logo.bmp w:\windows\Panther\ /y
@echo.
@echo.
rd /s /q w:\Factory
rd /s /q w:\office
rd /s /q w:\Logs
rd /s /q w:\recycler
@echo *****************************************************************
@echo Image deployment COMPLETE. Type EXIT from Command
@echo Prompt to restart or turn off device.
@echo *****************************************************************
goto :END
:ERROR
@echo.
@echo An error has been detected.
@echo.
goto :END
:ListPar
@REM This section is to bring a disk number and use it to List Partitions
@echo.
set TempDisk=%1
diskpart /s x:\Par.txt>x:\ParOutput.txt
for /f "skip=26 tokens=4" %%A in (x:\ParOutput.txt) do (
if /i NOT "%%A"=="Winpe" set Disk=%TempDisk%
)
Goto :EOF
:END
@rem
@rem Get finish time so we can evaluate total WinPE phase time.
@rem
call |time>x:\StopTime.txt
@rem
@rem Now parse both files to display the Start and Finish Time
@rem
@echo.
@echo.
for /f "tokens=5" %%A in (x:\starttime.txt) do echo Script Start Time is %%A
for /f "tokens=5" %%A in (x:\stoptime.txt) do echo Script Stop Time is %%A
@echo.