@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.
@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 *****************************************************************
@REM create diskpart script for list disk
@ECHO.>x:\listdisk.txt
@ECHO list disk>>x:\listdisk.txt
@ECHO exit>>x:\listdisk.txt
@ECHO x:\listdisk.txt
@ECHO call diskpart /s x:\listdisk.txt
CALL diskpart /s x:\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.
@ECHO.
@REM *****************************************************************
@REM Detect if System is booted into UEFI mode or Bios mode
@REM *****************************************************************
FOR /f "tokens=2* delims= " %%A IN ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B
@ECHO.
IF %Firmware%==0×1 GOTO :BIOSMODE
IF %Firmware%==0×2 GOTO :UEFIMODE
GOTO :END
:UEFIMODE
@ECHO.
@REM ************************
@REM UEFI SECTION
@REM ************************
@ECHO The PC is booted in UEFI mode
@ECHO.>x:\winpar.txt
@ECHO select disk "%Disk%">>x:\winpar.txt
rem @ECHO clean>>x:\winpart.txt
rem @ECHO convert gpt>>x:\winpart.txt
@ECHO select part 13>>x:\winpar.txt
@ECHO delete part override>>x:\winpar.txt
@ECHO select part 14>>x:\winpar.txt
@ECHO delete part override>>x:\winpar.txt
@ECHO select part 15>>x:\winpar.txt
@ECHO delete part override>>x:\winpar.txt
@ECHO select part 16>>x:\winpar.txt
@ECHO delete part override>>x:\winpar.txt
@ECHO.>x:\winpart.txt
@ECHO select disk "%Disk%">>x:\winpart.txt
@ECHO create partition efi size=128>>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=500>>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 list partition>>x:\winpart.txt
@ECHO exit>>x:\winpart.txt
@ECHO.
GOTO :WINPARTSECTION
:BIOSMODE
@REM ************************
@REM BIOS SECTION
@REM ************************
@ECHO The PC is booted in BIOS mode
@ECHO The PC is booted in BIOS mode>x:\Bios.txt
@ECHO.>x:\winpart.txt
@ECHO select disk "%Disk%">>x:\winpart.txt
@ECHO clean>>x:\winpart.txt
@ECHO create partition primary size=100>>x:\winpart.txt
@ECHO active>>x:\winpart.txt
@ECHO format quick fs=fat32 label="System">>x:\winpart.txt
@ECHO assign letter="S">>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 list partition>>x:\winpart.txt
@ECHO exit>>x:\winpart.txt
@ECHO.
GOTO :WINPARTSECTION
:WINPARTSECTION
@ECHO winpart.txt now contains…..
@ECHO.
TYPE x:\winpar.txt
type x:\winpart.txt
@ECHO.
@ECHO.
@ECHO *****************************************************************
@ECHO Setting up the partition table
@ECHO *****************************************************************
@ECHO call diskpart /s x:\winpart.txt
diskpart /s x:\winpar.txt
DISKPART /s x:\winpart.txt
@ECHO.
@ECHO.
@REM *****************************************************************
@REM Map drive letter for Install.wim
@REM *****************************************************************
@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.
@ECHO *****************************************************************
@ECHO Map drive letter for Install.wim and Winre.wim
@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%\install.swm
@ECHO.
@ECHO.
@REM Check usmt.ppkg was found and there are images in it.
IF NOT EXIST %InstallPath%\usmt.ppkg ECHO "usmt.ppkg NOT found." && GOTO :ERROR
@ECHO usmt.ppkg FOUND at %InstallPath%\usmt.ppkg
@ECHO.
@ECHO Making directories…
MD w:\recycler\scratch
IF %errorlevel% NEQ 0 ECHO "Failed to make w:\recycler\scratch directory" && GOTO :ERROR
MD r:\recovery\windowsre
IF %errorlevel% NEQ 0 ECHO "Failed to make r:\recovery\windowsre directory" && GOTO :ERROR
@ECHO.
@ECHO.
@ECHO *****************************************************************
@ECHO Applying the Windows image from the USB
@ECHO *****************************************************************
@ECHO DISM /Apply-Image /ImageFile:%InstallPath%\install.swm /SWMFile:install*.swm /Index:1 /ApplyDir:w:\ /Compact /ScratchDir:W:\recycler\SCRATCH
@ECHO Please waiting ..
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 *****************************************************************
@ECHO Copying winre.wim.
@ECHO *****************************************************************
@echo Modifying attributes of winre.wim so we can move it.
attrib w:\Windows\System32\recovery\winre.wim -s -h -a -r
@echo move w:\Windows\System32\recovery\winre.wim r:\recovery\windowsre
move w:\Windows\System32\recovery\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 reset attributes winre.wim now
@ECHO attrib +s +h +a +r r:\Recovery\Windowsre\winre.wim
ATTRIB +s +h +a +r r:\Recovery\Windowsre\winre.wim
@ECHO.
@ECHO.
@ECHO *****************************************************************
@ECHO Copying over NON Scanstate Packages, if they exist.
@ECHO *****************************************************************
@ECHO.
@ECHO.
COPY %InstallPath%\*.ppkg R:\Recovery\Customizations /y /s
@ECHO.
@ECHO.
@ECHO md R:\Recovery\OEM
MD R:\Recovery\OEM
IF %errorlevel% NEQ 0 ECHO "Failed to make R:\Recovery\OEM" && GOTO :ERROR
@ECHO.
@ECHO xcopy %InstallPath%\OEM R:\Recovery\OEM /y /s
XCOPY %InstallPath%\OEM R:\Recovery\OEM /y /s
@ECHO Modify w:\Recovery folder access permissions
ICACLS W:\Recovery /inheritance:r /T
ICACLS w:\Recovery /grant:r "SYSTEM:(F)" /T
ICACLS w:\Recovery /grant:r "*S-1-5-32-544:(F)" /T
ATTRIB +s +h +r R:\Recovery\Customizations
@REM ATTRIB +s +h +r R:\Recovery\OEM
ATTRIB +s +h +r R:\Recovery
@ECHO.
@ECHO.
@ECHO *****************************************************************
@ECHO Add default product key
@ECHO *****************************************************************
@REM ******************************************************************
@REM Windows 10 Default Product Keys to be used with OEM Activation 3.0
@REM ******************************************************************
@REM Windows 10 Home 37GNV-YCQVD-38XP9-T848R-FC2HD
@REM Windows 10 Home N 33CY4-NPKCC-V98JP-42G8W-VH636
@REM Windows 10 Pro NF6HC-QH89W-F8WYV-WWXV4-WFG6P
@REM Windows 10 Pro N NH7W7-BMC3R-4W9XT-94B6D-TCQG3
@REM Windows 10 SL NTRHT-XTHTG-GBWCG-4MTMP-HH64C
@REM Windows 10 CHN SL 7B6NC-V3438-TRQG7-8TCCX-H6DDY
@REM
@REM ******************************************************************
@REM Windows 10 Default Product Keys to be used without OEM Activation 3.0
@REM ******************************************************************
@REM Windows 10 Home 46J3N-RY6B3-BJFDY-VBFT9-V22HG
@REM Windows 10 Home N PGGM7-N77TC-KVR98-D82KJ-DGPHV
@REM Windows 10 Pro RHGJR-N7FVY-Q3B8F-KBQ6V-46YP4
@REM Windows 10 Pro N 2KMWQ-NRH27-DV92J-J9GGT-TJF9R
@REM Windows 10 SL GH37Y-TNG7X-PP2TK-CMRMT-D3WV4
@REM Windows 10 CHN SL 68WP7-N2JMW-B676K-WR24Q-9D7YC
@REM
@REM This is the default product key being used:
SET productkey=37GNV-YCQVD-38XP9-T848R-FC2HD
@ECHO.
@ECHO call DISM /Image:w: /Set-ProductKey:%productkey%
CALL DISM /Image:w: /Set-ProductKey:%productkey%
IF %errorlevel% NEQ 0 ECHO "Failed to SET productkey." && GOTO :ERROR
@ECHO.
@ECHO.
@ECHO *****************************************************************
@ECHO Setting the boot environment
@ECHO *****************************************************************
@ECHO call X:\WINDOWS\SYSTEM32\BCDBOOT w:\WINDOWS /s s: /f all
X:\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 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 *****************************************************************
@ECHO Copying over Unattend.xml to use on factory floor if it exists
@ECHO *****************************************************************
@ECHO if EXIST %InstallPath%\Unattend.xml xcopy %InstallPath%\Unattend.xml w:\Windows\Panther /y
IF EXIST %InstallPath%\Unattend.xml XCOPY %InstallPath%\UnattendAudit.xml w:\Windows\Panther\Unattend.xml /y
@ECHO.
@ECHO.
@ECHO *****************************************************************
@ECHO Copying tools to use on factory floor if it exists
@ECHO *****************************************************************
@ECHO xcopy TEST TOOL
XCOPY %InstallPath%\TESTTOOL W:\TESTTOOL /I /E
XCOPY %InstallPath%\OA30_TOOL W:\OA30_TOOL /I /E
XCOPY %InstallPath%\desktop W:\desktop /I /E
attrib w:\recovery -S -H -R
MD W:\recovery\OEM
XCopy %InstallPath%\OEM W:\Recovery\OEM /y /s
attrib w:\recovery +S +H +R
attrib w:\recovery\OEM +S +H +R
@ECHO.
@ECHO rmdir /s /q w:\recycler
rmdir /s /q w:\recycler
@ECHO.
@ECHO *****************************************************************
@ECHO Image deployment COMPLETE. Type EXIT from Command
@ECHO *****************************************************************
@ECHO.
GOTO :REBOOT
: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
:REBOOT
@REM
@REM Get finish time so we can evaluate total WinPE phase time.
@REM
CALL |time>x:\StopTime.txt
@ECHO.
@ECHO Deployment complete, system restart.
WPEUTIL REBOOT
@ECHO.
:ERROR
@ECHO.
@ECHO An error has been detected.
COLOR 4F
@ECHO.
GOTO :END
:END
@REM
@REM Get finish time so we can evaluate total WinPE phase time.
@REM
CALL |time>x:\StopTime.txt
@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.