@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. Standard echo 7. Lab echo. set PCTYPE= set /p pctype_choice=Enter your choice (1-7): 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=Standard if "%pctype_choice%"=="7" set PCTYPE=Lab if "%PCTYPE%"=="" goto pctype_menu REM --- Sub-type selection menus --- REM PCSUBTYPE is written to pc-subtype.txt alongside pc-type.txt. REM Scripts read it to look up the right profile in site-config.json. set PCSUBTYPE= set DISPLAYTYPE= REM --- Standard sub-type --- if not "%PCTYPE%"=="Standard" goto skip_standard_menu :standard_menu cls echo. echo ======================================== echo Standard PC Sub-Type echo ======================================== echo. echo 1. Timeclock (WJ Shopfloor only) echo 2. Machine (WJ Shopfloor, Plant Apps, eDNC, UDC) echo. set /p standard_choice=Enter your choice (1-2): if "%standard_choice%"=="1" set PCSUBTYPE=Timeclock if "%standard_choice%"=="2" set PCSUBTYPE=Machine if "%PCSUBTYPE%"=="" goto standard_menu REM --- Machine number (Standard only) --- set MACHINENUM=9999 echo. set /p MACHINENUM=Enter machine number (digits, or Enter for 9999): if "%MACHINENUM%"=="" set MACHINENUM=9999 echo Machine number: %MACHINENUM% :skip_standard_menu REM --- Display sub-type --- 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%"=="1" set PCSUBTYPE=Lobby if "%display_choice%"=="2" set DISPLAYTYPE=Dashboard if "%display_choice%"=="2" set PCSUBTYPE=Dashboard if "%PCSUBTYPE%"=="" 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 site config (drives site-specific values in all setup scripts) --- if exist "Y:\site-config.json" ( copy /Y "Y:\site-config.json" "W:\Enrollment\site-config.json" echo Copied site-config.json. ) else ( echo WARNING: site-config.json not found on enrollment share. ) 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:\Enrollment\run-enrollment.ps1" copy /Y "Y:\wait-for-internet.ps1" "W:\Enrollment\wait-for-internet.ps1" copy /Y "Y:\migrate-to-wifi.ps1" "W:\Enrollment\migrate-to-wifi.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 if not "%PCSUBTYPE%"=="" echo %PCSUBTYPE%> W:\Enrollment\pc-subtype.txt if not "%MACHINENUM%"=="" echo %MACHINENUM%> W:\Enrollment\machine-number.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 copy /Y "Y:\shopfloor-setup\backup_lockdown.bat" "W:\Enrollment\shopfloor-setup\backup_lockdown.bat" 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 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%. ) REM --- Stage preinstall bundle (apps installed locally to save Azure bandwidth) --- if exist "Y:\preinstall\preinstall.json" ( mkdir W:\PreInstall 2>NUL mkdir W:\PreInstall\installers 2>NUL copy /Y "Y:\preinstall\preinstall.json" "W:\PreInstall\preinstall.json" if exist "Y:\preinstall\installers" ( xcopy /E /Y /I "Y:\preinstall\installers" "W:\PreInstall\installers\" echo Staged preinstall bundle to W:\PreInstall. ) else ( echo WARNING: Y:\preinstall\installers not found - preinstall.json staged without installers. ) ) else ( echo No preinstall bundle on PXE server - skipping. ) REM --- Stage CMM bootstrap bundle (CMM-type PCs only) --- REM Copies the Hexagon installer bundle (~1.9 GB) from the PXE server enrollment REM share onto the target disk so 01-Setup-CMM.ps1 can install from local disk. REM The tsgwp00525 SFLD share that holds the canonical copy is not yet reachable REM during shopfloor-setup (Azure DSC provisions those creds later), so this REM bootstrap exists to get the first-install through. Post-imaging, the logon- REM triggered CMM-Enforce.ps1 takes over from the share. if /i not "%PCTYPE%"=="CMM" goto skip_cmm_stage if exist "Y:\cmm-installers\cmm-manifest.json" ( mkdir W:\CMM-Install 2>NUL xcopy /E /Y /I "Y:\cmm-installers" "W:\CMM-Install\" echo Staged CMM bootstrap to W:\CMM-Install. ) else ( echo WARNING: Y:\cmm-installers not found - CMM PC cannot install Hexagon apps at imaging time. ) :skip_cmm_stage :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