@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.
@rem *****************************************************************
@rem List all the disks, then search the volumes of each one to see
@rem which disks may have "Winpe" in the label. We will ignore that
@rem disk and use the first disk without the Winpe label that we find.
@rem *****************************************************************
@echo call diskpart /s %WinPESource%DiskpartFiles\listdisk.txt
call diskpart /s %WinPESource%DiskpartFiles\listdisk.txt>x:\Disks.txt
@echo.
@rem Set Disk equal to blank to start
set disk=
@echo.
@rem
@rem This line will write a diskpart script to select the disk and detail it's contents.
@rem We use this output to find a disk that does NOT have Winpe as the volume label.
@rem That disk will have the OS installed to it. This way you can exclude USB from diskpart.
@rem
@rem This works around the issue where the USB key is sometimes enumerated as disk 0 and the
@rem SSD is disk 1.
@rem
for /f "skip=8 tokens=2" %%A in (x:\Disks.txt) do (
@echo sel disk %%A>x:\Par.txt
@echo det disk>>x:\Par.txt
@echo exit>>x:\Par.txt
if NOT "%%A"=="DiskPart…" call :ListPar %%A
)
if %Disk%=="" echo No disk found without a volume label of "Winpe"&& set disk=0
@echo Using Disk "%Disk%"
@echo.
@echo call diskpart /s %WinPESource%DiskpartFiles\listdisk.txt
call diskpart /s %WinPESource%DiskpartFiles\listvol.txt>x:\Vols.txt
@echo.
@echo.>x:\checkpart.txt
@echo select disk "%Disk%">>x:\checkpart.txt
@echo list partition>>x:\checkpart.txt
@echo exit>>x:\checkpart.txt
@echo call diskpart /s x:\checkpart.txt>x:\outpar.txt
call diskpart /s x:\checkpart.txt>x:\outpar.txt
@echo.
@echo.>x:\DelPar.txt
@echo select disk "%Disk%">>x:\DelPar.txt
for /f "skip=25 tokens=2" %%A in (x:\outpar.txt) do (
if %%A NEQ DiskPart… echo select partition %%A>>x:\DelPar.txt && echo delete partition override>>x:\DelPar.txt
)
echo exit>>x:\DelPar.txt
diskpart /s x:\DelPar.txt
@echo.
@echo *****************************************************************
@echo Write the diskpart script now that we know what disk to use
@echo *****************************************************************
@echo.>x:\wimpart.txt
@echo select disk "%Disk%">>x:\wimpart.txt
@echo select volume "0">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "1">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "2">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "3">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "4">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "5">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "6">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "7">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "8">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "9">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "10">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "11">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "12">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
@echo select volume "13">>x:\wimpart.txt
@echo attributes volume set hidden>>x:\wimpart.txt
rem @echo create partition efi size=100>>x:\wimpart.txt
rem @echo format quick fs=fat32 label="System">>x:\wimpart.txt
rem @echo assign letter="S">>x:\wimpart.txt
@echo create partition msr size=128>>x:\wimpart.txt
@echo create partition primary>>x:\wimpart.txt
@echo shrink minimum=5000>>x:\wimpart.txt
@echo format quick fs=ntfs label="Windows">>x:\wimpart.txt
@echo assign letter="W">>x:\wimpart.txt
@echo create partition primary>>x:\wimpart.txt
@echo format quick fs=ntfs label="Images">>x:\wimpart.txt
@echo assign letter="M">>x:\wimpart.txt
@echo set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac">>x:\wimpart.txt
@echo gpt attributes=0×8000000000000001>>x:\wimpart.txt
@echo exit>>x:\wimpart.txt
@echo.
@echo Wimpart.txt now contains…..
@echo.
type x:\wimpart.txt
@echo.
@echo.
@echo *****************************************************************
@echo Setting up the partition table
@echo *****************************************************************
@echo call diskpart /s x:\wimpart.txt
diskpart /s x:\wimpart.txt
@echo.
@echo.
@echo.
@echo *****************************************************************
@rem Map drive letter for Install.wim and Winre.wim
@echo *****************************************************************
@rem Create an output file containing all the drive letters
@echo call diskpart /s %WinPESource%DiskpartFiles\listVol.txt>%WinPESource%Output.txt
diskpart /s %WinPESource%DiskpartFiles\listVol.txt>%WinPESource%Output.txt
@echo.
@rem Go through each drive letter, looking for the images\Install.txt file
for /f "skip=8 tokens=3" %%A in (%WinPESource%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.wim echo "Install.wim NOT found." && goto :Error
@echo Install.wim FOUND at %InstallPath%\images\install.wim
@echo.
@rem Check that Winre.wim is there as well.
if NOT EXIST %InstallPath%\Winre.wim echo "Winre.wim NOT found." && goto :Error
@echo Winre.wim FOUND at %InstallPath%\images\winre.wim
@echo.
@echo.
@echo.
@echo *****************************************************************
@rem Switches to the USB disk
@rem Create folders on local (eMMC) disk and copy files from USB disk
@echo *****************************************************************
@echo.
@echo Making directories…
md w:\recycler\scratch
if %errorlevel% NEQ 0 echo "Failed to make w:\recycler\scratch directory" && goto :error
md m:\"windows images"
if %errorlevel% NEQ 0 echo "Failed to make m:\windows images directory" && goto :error
md m:\recovery\windowsre
if %errorlevel% NEQ 0 echo "Failed to make m:\recovery\windowsre directory" && goto :error
@echo.
@echo copy %InstallPath%\install.wim m:\"windows images"
copy %InstallPath%\install.wim m:\"windows images"
if %errorlevel% NEQ 0 echo "Failed to copy install.wim to m:\Windows images" && goto :error
@echo.
@echo copy %InstallPath%\winre.wim m:\recovery\windowsre
copy %InstallPath%\winre.wim m:\recovery\windowsre
if %errorlevel% NEQ 0 echo "Failed to copy winre.wim to m:\recovery\windowsre" && goto :error
@echo.
@echo.
@echo *****************************************************************
@echo Copying over Office Bits for Pre-installation during Audit mode
@echo *****************************************************************
@rem @echo xcopy "%WinPESource%Office 15.3 AFO bits"\*.* w:\Office_Temp\ /cherky
@rem xcopy "%WinPESource%Office 15.3 AFO bits"\*.* w:\Office_Temp\ /cherky
@echo.
@echo.
@echo *****************************************************************
@echo Applying the WIMboot image from the Images Partition in the eMMC
@echo *****************************************************************
@echo call DISM /Apply-Image /ImageFile:"m:\windows images\install.wim" /ApplyDir:w: /Index:1 /WIMBoot /ScratchDir:w:\recycler\SCRATCH
DISM /Apply-Image /ImageFile:"m:\windows images\install.wim" /ApplyDir:w: /Index:1 /WIMBoot /ScratchDir:w:\recycler\SCRATCH
if %errorlevel% NEQ 0 echo "Failed to apply image to w:" && goto :error
@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
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 M:\RECOVERY\WINDOWSRE /target w:\windows
w:\windows\system32\reagentc /SetREImage /Path M:\RECOVERY\WINDOWSRE /target w:\windows
if %errorlevel% NEQ 0 echo "Failed to set recovery information" && goto :error
@echo.
@echo.
@echo.
@echo.
rmdir /s /q w:\recycler
@echo.
@echo *****************************************************************
@echo WIMboot image deployment COMPLETE. Type EXIT from Command
@echo Prompt to restart or turn off device.
@echo *****************************************************************
@echo ============================ Step 2.0 Setting the recovery environment For HW Recovery ============================
rem
rem cd /d %InstallPath%
rem cd \
rem cd Scripts\
rem call 00_F9_recovery.bat
rem Wpeutil shutdown
exit
goto :END
:ERROR
@echo.
@echo An error has been detected.
color 4f
@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=24 tokens=3" %%A in (x:\ParOutput.txt) do (
if /i "%%A"=="no" set Disk=%TempDisk%
)
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.