Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
189 changes: 189 additions & 0 deletions .github/crashdetect/CrashDetectCreateUsb.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
@echo off
setlocal

set WINPE_DRIVE=A
set WINUSB_DRIVE=B
set EXITCODE=0

rem Pre-check
if not exist "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\dism.exe" (
echo ERROR: Missing DISM tool!
goto error
)
if not exist "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\en-us\winpe.wim" (
echo ERROR: Missing winpe.wim image!
goto error
)
if not exist "C:\WinPE_USB\Scripts\CrashDetectOsReinstall.cmd" (
echo ERROR: Missing script C:\WinPE_USB\Scripts\CrashDetectOsReinstall.cmd!
goto error
)
if not exist "C:\WinPE_USB\Scripts\Unattend.xml" (
echo ERROR: Missing XML C:\WinPE_USB\Scripts\Unattend.xml!
goto error
)
if not exist "C:\WinPE_USB\Images\install.wim" (
echo ERROR: Missing WIM C:\WinPE_USB\Images\install.wim!
goto error
)

rem Environment setup.
echo Setting up environment for ADK tools...
cd "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>"
call DandISetEnv.bat
echo Done setting up environment.

rem Ask for the USB disk number displayed in Diskpart.
echo Displaying detected disk drives..
echo Creating DiskPart script...
(
echo list disk
) > C:\WinPE_USB\diskpart.txt
diskpart /s C:\WinPE_USB\diskpart.txt
del C:\WinPE_USB\diskpart.txt
echo(
echo(
echo Note that Disk 0 is often the OS drive you do NOT want to format!
echo(
echo Ensure drive letters %WINPE_DRIVE%: and %WINUSB_DRIVE%: are not currently assigned to other drives!
echo It's ok if it's assigned to the target USB.
echo(
set /p USBDISK=Enter the Disk Number of the USB drive you want to make WinPE bootable:
echo(
echo Disk %USBDISK% selected.

rem Create a USB drive with WinPE and data partitions.
echo(
echo WARNING!!!: VERIFY DISK %USBDISK% IS THE CORRECT USB DISK TO FORMAT!
choice /C YN /M "ARE YOU SURE YOU WANT TO FORMAT DISK %USBDISK%?"
echo(
if %errorlevel% equ 2 (
echo You chose NO, exiting without modifying USB key.
exit /b 0
)
if %errorlevel% equ 1 (
echo You chose YES, proceeding with formatting USB key.
)

:dism
rem Update startnet.cmd autorun script in WinPE boot image (winpe.wim).
cd /d "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64"
echo(
if not exist "C:\WinPE_USB\WinPE_amd64\mount" (
echo Creating temp folders C:\WinPE_USB\WinPE_amd64\mount...
mkdir "C:\WinPE_USB\WinPE_amd64\mount"
)
echo Mounting WinPE image to modify...
Dism /Mount-Image /ImageFile:"en-us\winpe.wim" /index:1 /MountDir:"C:\WinPE_USB\WinPE_amd64\mount"
if errorlevel 1 (
echo ERROR: DISM failed to mount ImageFile:"en-us\winpe.wim"!
goto error
)
echo Done mounting winpe.wim image.
echo Updating startnet.cmd autorun script in WinPE boot image...
(
echo wpeinit
echo.
echo @echo off
echo rem Find USB drive.
echo for %%%%D in (D E F G H I J K L M N O P Q R S T U V W Y Z^) do ^(
echo if exist %%%%D:Scripts\CrashDetectOsReinstall.cmd ^(
echo call %%%%D:Scripts\CrashDetectOsReinstall.cmd
echo goto EOF
echo ^)
echo ^)
) > "C:\WinPE_USB\WinPE_amd64\mount\Windows\System32\startnet.cmd"
echo Done adding CrashDetectOsReinstall.cmd to startnet.cmd.
echo Unmounting WinPE image with committed changes...
Dism /Unmount-Image /MountDir:"C:\WinPE_USB\WinPE_amd64\mount" /commit
if errorlevel 1 (
echo ERROR: DISM failed to unmount ImageFile:"en-us\winpe.wim"!
echo USB drive have not been touched yet.
goto error
)
echo Done unmounting winpe.wim image.

rem Delete temp "WinPE_amd64" folder, else the "copype.cmd" below will fail if the folder is already present.
rmdir /s /q "C:\WinPE_USB\WinPE_amd64"
echo Deleted temp folder "C:\WinPE_USB\WinPE_amd64".
echo(
echo Wiping out USB and creating 2 partitions...
echo Creating DiskPart script...
(
echo select disk %USBDISK%
echo clean
echo create partition primary size=2048
echo active
echo format fs=FAT32 quick label="WinPE"
echo assign letter=%WINPE_DRIVE%
echo create partition primary
echo format fs=NTFS quick label="WinUSB"
echo assign letter=%WINUSB_DRIVE%
) > C:\WinPE_USB\diskpart.txt
echo Partitioning USB...
diskpart /s C:\WinPE_USB\diskpart.txt
if errorlevel 1 (
echo ERROR: DiskPart failed during partitioning and formatting USB!
del C:\WinPE_USB\diskpart.txt
goto error
)
del C:\WinPE_USB\diskpart.txt
echo Done partitioning and formatting USB.
echo(
rem The "copype.cmd" script will create working directory "WinPE_amd64", it will fail if directory already exist.
echo Copying WinPE working files to "C:\WinPE_USB\WinPE_amd64"...
call copype.cmd amd64 "C:\WinPE_USB\WinPE_amd64"
if errorlevel 1 (
echo ERROR: Script "copype.cmd" failed to copy working files!
goto error
)
echo Done copying WinPE files.
echo(
rem Install WinPE to the USB and make it bootable.
echo Creating bootable WinPE USB...
call Makewinpemedia.cmd /ufd /f "C:\WinPE_USB\WinPE_amd64" "%WINPE_DRIVE%:" /bootex
if errorlevel 1 (
echo ERROR: Script "Makewinpemedia.cmd" failed to make WinPE USB bootable!
goto error
)
echo Done, WinPE USB drive is now bootable.
echo(
rem Copy Unattend.xml, scripts and install.wim over to USB
echo Copying Unattend.xml and scripts over to USB...
xcopy "C:\WinPE_USB\Scripts\" "%WINUSB_DRIVE%:\Scripts\" /E /I /R /Y
if errorlevel 1 (
echo ERROR: Failed copying scripts from "C:\WinPE_USB\Scripts\" to USB!
goto error
)
echo Done copying script files.
echo(
echo Copying install.wim over to USB...this could take a while...
robocopy "C:\WinPE_USB\Images" "%WINUSB_DRIVE%:\Images" install.wim /ETA /J
if %errorlevel% geq 8 (
echo ERROR: Failed copying install.wim from "C:\WinPE_USB\Images\" to USB!
goto error
)
echo Done copying WIM file.
echo(
goto cleanup

:error
set EXITCODE=1
goto cleanup

:cleanup
rem Clean up any temp folders.
if exist "C:\WinPE_USB\WinPE_amd64" (
rmdir /s /q "C:\WinPE_USB\WinPE_amd64"
echo Cleaned up temp folder "C:\WinPE_USB\WinPE_amd64".
)

:done
if %EXITCODE% equ 0 (
echo(
echo SUCCESSFULLY CREATED BOOTABLE WINPE USB DRIVE.
) else (
echo(
echo FAILED CREATING BOOTABLE WINPE USB DRIVE!
)
endlocal & exit /b %EXITCODE%
Loading
Loading