- Fix check-bios.cmd: replace parenthesized if blocks with goto labels (cmd.exe fails silently with if/else on network-mapped drives) - Move BIOS check files to winpeapps/_shared/BIOS for reliable SMB access - Add network wait loop before BIOS check in startnet.cmd - Show firmware status in WinPE menu header (BIOS_STATUS variable) - Add BypassNRO registry key to skip OOBE network requirement - Refactor download-drivers.py with --parallel N flag (ThreadPoolExecutor) - Set SupportUser AutoLogonCount to 3 in shopfloor unattend - Add shutdown -a at start + shutdown /r /t 10 at end of Run-ShopfloorSetup.ps1 - Switch download-drivers.py from wget to curl for reliable stall detection Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
276 lines
8.7 KiB
Batchfile
276 lines
8.7 KiB
Batchfile
@echo off
|
|
echo Please wait while 'WinPE' is being processed. This may take a few seconds.
|
|
wpeinit
|
|
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
|
|
|
|
REM --- Wait for network (DHCP may take a moment after wpeinit) ---
|
|
echo Waiting for network...
|
|
:wait_net
|
|
ping -n 2 10.9.100.1 >NUL 2>&1
|
|
if errorlevel 1 goto wait_net
|
|
echo Network ready.
|
|
|
|
REM --- BIOS update check (runs before imaging menu) ---
|
|
set BIOS_STATUS=No BIOS check (share unavailable)
|
|
net use B: \\10.9.100.1\winpeapps\_shared /user:pxe-upload pxe /persistent:no 2>NUL
|
|
if exist B:\BIOS\check-bios.cmd (
|
|
echo.
|
|
echo Checking for BIOS updates...
|
|
call B:\BIOS\check-bios.cmd
|
|
REM If BIOS was flashed, check-bios.cmd reboots and we never reach here.
|
|
echo.
|
|
)
|
|
net use B: /delete 2>NUL
|
|
|
|
:menu
|
|
cls
|
|
echo.
|
|
echo ========================================
|
|
echo WinPE Setup Menu
|
|
echo ========================================
|
|
echo Firmware: %BIOS_STATUS%
|
|
echo.
|
|
echo Please select an option:
|
|
echo.
|
|
echo 1. GEA Standard
|
|
echo 2. GEA Engineer
|
|
echo 3. GEA Shopfloor
|
|
echo 4. GE Standard
|
|
echo 5. GE Engineer
|
|
echo 6. GE Shopfloor Lockdown
|
|
echo 7. GE Shopfloor MCE
|
|
echo.
|
|
echo ========================================
|
|
echo.
|
|
set /p choice=Enter your choice (1-7):
|
|
|
|
REM --- Only shopfloor images (3,6,7) need GCCH enrollment ---
|
|
set PPKG=
|
|
if "%choice%"=="3" goto enroll_menu
|
|
if "%choice%"=="6" goto enroll_menu
|
|
if "%choice%"=="7" goto enroll_menu
|
|
goto enroll_staged
|
|
|
|
:enroll_menu
|
|
cls
|
|
echo.
|
|
echo ========================================
|
|
echo GCCH Enrollment Profile
|
|
echo ========================================
|
|
echo.
|
|
echo 1. No Office
|
|
echo 2. Standard Office (x86)
|
|
echo 3. Standard Office (x64)
|
|
echo 4. Pro Plus Office (x86) with Access
|
|
echo 5. Pro Plus Office (x64) with Access
|
|
echo 6. Skip enrollment
|
|
echo.
|
|
set /p enroll=Enter your choice (1-6):
|
|
if "%enroll%"=="1" set PPKG=GCCH_Prod_SFLD_NoOffice_US_Exp_20260430_v4.8.ppkg
|
|
if "%enroll%"=="2" set PPKG=GCCH_Prod_SFLD_StdOffice-x86_US_Exp_20260430_v4.8.ppkg
|
|
if "%enroll%"=="3" set PPKG=GCCH_Prod_SFLD_StdOffice-x64_US_Exp_20260430_v4.8.ppkg
|
|
if "%enroll%"=="4" set PPKG=GCCH_Prod_SFLD_ProPlusOffice-x86_US_Exp_20260430_v4.8.ppkg
|
|
if "%enroll%"=="5" set PPKG=GCCH_Prod_SFLD_ProPlusOffice-x64_US_Exp_20260430_v4.8.ppkg
|
|
if "%enroll%"=="6" set PPKG=
|
|
if "%enroll%"=="" goto enroll_menu
|
|
|
|
:pctype_menu
|
|
cls
|
|
echo.
|
|
echo ========================================
|
|
echo Shopfloor PC Type
|
|
echo ========================================
|
|
echo.
|
|
echo 1. CMM
|
|
echo 2. Wax and Trace
|
|
echo 3. Keyence
|
|
echo 4. Genspect
|
|
echo 5. Display
|
|
echo 6. Shopfloor (General)
|
|
echo.
|
|
set PCTYPE=
|
|
set /p pctype_choice=Enter your choice (1-6):
|
|
if "%pctype_choice%"=="1" set PCTYPE=CMM
|
|
if "%pctype_choice%"=="2" set PCTYPE=WaxAndTrace
|
|
if "%pctype_choice%"=="3" set PCTYPE=Keyence
|
|
if "%pctype_choice%"=="4" set PCTYPE=Genspect
|
|
if "%pctype_choice%"=="5" set PCTYPE=Display
|
|
if "%pctype_choice%"=="6" set PCTYPE=Shopfloor
|
|
if "%PCTYPE%"=="" goto pctype_menu
|
|
|
|
REM --- Display sub-type selection ---
|
|
set DISPLAYTYPE=
|
|
if not "%PCTYPE%"=="Display" goto skip_display_menu
|
|
:display_menu
|
|
cls
|
|
echo.
|
|
echo ========================================
|
|
echo Display Type
|
|
echo ========================================
|
|
echo.
|
|
echo 1. Lobby Display
|
|
echo 2. Dashboard
|
|
echo.
|
|
set /p display_choice=Enter your choice (1-2):
|
|
if "%display_choice%"=="1" set DISPLAYTYPE=Lobby
|
|
if "%display_choice%"=="2" set DISPLAYTYPE=Dashboard
|
|
if "%DISPLAYTYPE%"=="" goto display_menu
|
|
:skip_display_menu
|
|
|
|
REM --- Map enrollment share early (kept open for copy after imaging) ---
|
|
set NEED_ENROLL=0
|
|
if not "%PPKG%"=="" set NEED_ENROLL=1
|
|
if not "%PCTYPE%"=="" set NEED_ENROLL=1
|
|
if "%NEED_ENROLL%"=="0" goto enroll_staged
|
|
net use Y: \\10.9.100.1\enrollment /user:pxe-upload pxe /persistent:no
|
|
if "%PPKG%"=="" goto enroll_staged
|
|
if not exist "Y:\%PPKG%" (
|
|
echo WARNING: %PPKG% not found on server. Enrollment will be skipped.
|
|
set PPKG=
|
|
)
|
|
:enroll_staged
|
|
|
|
echo. > X:\Boot.tag
|
|
if "%choice%"=="1" goto gea-standard
|
|
if "%choice%"=="2" goto gea-engineer
|
|
if "%choice%"=="3" goto gea-shopfloor
|
|
if "%choice%"=="4" goto ge-standard
|
|
if "%choice%"=="5" goto ge-engineer
|
|
if "%choice%"=="6" goto ge-shopfloor-lockdown
|
|
if "%choice%"=="7" goto ge-shopfloor-mce
|
|
echo Invalid choice. Please try again.
|
|
pause
|
|
goto menu
|
|
|
|
:gea-standard
|
|
echo.
|
|
echo Starting GEA Standard setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\gea-standard /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:gea-engineer
|
|
echo.
|
|
echo Starting GEA Engineer setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\gea-engineer /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:gea-shopfloor
|
|
echo.
|
|
echo Starting GEA Shopfloor setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\gea-shopfloor /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:ge-standard
|
|
echo.
|
|
echo Starting GE Standard setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\ge-standard /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:ge-engineer
|
|
echo.
|
|
echo Starting GE Engineer setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\ge-engineer /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:ge-shopfloor-lockdown
|
|
echo.
|
|
echo Starting GE Shopfloor Lockdown setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\ge-shopfloor-lockdown /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:ge-shopfloor-mce
|
|
echo.
|
|
echo Starting GE Shopfloor MCE setup...
|
|
start "FlatApp" %SYSTEMDRIVE%\GESetup\FlatSetupLoader.exe
|
|
for /l %%i in (1,1,2000000) do rem
|
|
net use Z: \\10.9.100.1\winpeapps\ge-shopfloor-mce /user:pxe-upload pxe /persistent:no
|
|
goto end
|
|
|
|
:end
|
|
echo.
|
|
echo Waiting for PESetup.exe to start...
|
|
:wait_start
|
|
ping -n 3 127.0.0.1 >NUL
|
|
wmic process where "name='PESetup.exe'" get name 2>NUL | find /I "PESetup" >NUL
|
|
if errorlevel 1 goto wait_start
|
|
echo PESetup.exe is running. Waiting for imaging to complete...
|
|
|
|
REM --- Copy enrollment package and shopfloor setup as soon as Windows partition appears ---
|
|
if "%PPKG%"=="" if "%PCTYPE%"=="" goto wait_finish
|
|
echo Waiting for Windows partition at W: ...
|
|
:wait_enroll
|
|
ping -n 11 127.0.0.1 >NUL
|
|
if not exist W:\Windows\System32\config\system goto wait_enroll
|
|
echo Found Windows at W:
|
|
mkdir W:\Enrollment 2>NUL
|
|
|
|
REM --- Copy PPKG if selected ---
|
|
if "%PPKG%"=="" goto copy_pctype
|
|
copy /Y "Y:\%PPKG%" "W:\Enrollment\%PPKG%"
|
|
if errorlevel 1 (
|
|
echo WARNING: Failed to copy enrollment package.
|
|
goto copy_pctype
|
|
)
|
|
copy /Y "Y:\run-enrollment.ps1" "W:\run-enrollment.ps1"
|
|
|
|
REM --- Create enroll.cmd at drive root as manual fallback ---
|
|
> W:\enroll.cmd (
|
|
echo @echo off
|
|
echo echo Waiting for network...
|
|
echo :waitnet
|
|
echo ping -n 2 8.8.8.8 ^>NUL 2^>^&1
|
|
echo if errorlevel 1 goto waitnet
|
|
echo echo Network connected. Running enrollment...
|
|
echo powershell.exe -ExecutionPolicy Bypass -File "C:\run-enrollment.ps1"
|
|
)
|
|
echo Manual fallback created at W:\enroll.cmd
|
|
|
|
:copy_pctype
|
|
REM --- Copy shopfloor PC type setup scripts ---
|
|
if "%PCTYPE%"=="" goto cleanup_enroll
|
|
echo %PCTYPE%> W:\Enrollment\pc-type.txt
|
|
if not "%DISPLAYTYPE%"=="" echo %DISPLAYTYPE%> W:\Enrollment\display-type.txt
|
|
copy /Y "Y:\shopfloor-setup\Run-ShopfloorSetup.ps1" "W:\Enrollment\Run-ShopfloorSetup.ps1"
|
|
REM --- Always copy Shopfloor baseline scripts ---
|
|
mkdir W:\Enrollment\shopfloor-setup 2>NUL
|
|
if exist "Y:\shopfloor-setup\Shopfloor" (
|
|
mkdir W:\Enrollment\shopfloor-setup\Shopfloor 2>NUL
|
|
xcopy /E /Y /I "Y:\shopfloor-setup\Shopfloor" "W:\Enrollment\shopfloor-setup\Shopfloor\"
|
|
echo Copied Shopfloor baseline setup files.
|
|
)
|
|
REM --- Copy type-specific scripts on top of baseline ---
|
|
if "%PCTYPE%"=="Shopfloor" goto pctype_done
|
|
if exist "Y:\shopfloor-setup\%PCTYPE%" (
|
|
mkdir "W:\Enrollment\shopfloor-setup\%PCTYPE%" 2>NUL
|
|
xcopy /E /Y /I "Y:\shopfloor-setup\%PCTYPE%" "W:\Enrollment\shopfloor-setup\%PCTYPE%\"
|
|
echo Copied %PCTYPE% setup files.
|
|
) else (
|
|
echo WARNING: No setup files found for PC type %PCTYPE%.
|
|
)
|
|
:pctype_done
|
|
|
|
:cleanup_enroll
|
|
net use Y: /delete 2>NUL
|
|
|
|
:wait_finish
|
|
ping -n 11 127.0.0.1 >NUL
|
|
wmic process where "name='PESetup.exe'" get name 2>NUL | find /I "PESetup" >NUL
|
|
if not errorlevel 1 goto wait_finish
|
|
echo.
|
|
echo Imaging complete. Rebooting in 15 seconds...
|
|
echo Press Ctrl+C to cancel.
|
|
ping -n 16 127.0.0.1 >NUL
|
|
wpeutil reboot
|