Run-ShopfloorSetup.ps1 line 46-47 does:
Get-ChildItem -Path $baselineDir -Filter "*.ps1" -File | Sort-Object Name
foreach ($script in $scripts) { & $script.FullName }
This picks up EVERY *.ps1 in Shopfloor\ and runs it as a baseline
script. Last commit (66d13d8) put Monitor-IntuneProgress.ps1 in that
same directory, which means the dispatcher was running it as the LAST
baseline script (M sorts after 00/04/05). The monitor is an infinite
poll loop that never returns until the SFLD lifecycle is complete -
so the dispatcher hung there forever, and Standard\01-eDNC.ps1 and
Standard\Set-MachineNumber.ps1 never ran.
Symptoms in the test run:
- 00-PreInstall-MachineApps.ps1 ran (10 installed, 1 OpenText fail)
- 04-NetworkAndWinRM.ps1 ran silently
- 05-OfficeShortcuts.ps1 ran silently
- Monitor-IntuneProgress.ps1 started (Clear-Host + status table) and
hung in its main loop
- eDNC + Set-MachineNumber never ran
Fix: move Monitor-IntuneProgress.ps1 into Shopfloor\lib\ so the
dispatcher's non-recursive Get-ChildItem doesn't see it. Update
sync_intune.bat's MONITOR path to the new location, and add a
comment explaining WHY the monitor lives under lib\ to prevent this
mistake from being repeated.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
82 lines
2.7 KiB
Batchfile
82 lines
2.7 KiB
Batchfile
@echo off
|
|
REM sync_intune.bat - Thin launcher for Monitor-IntuneProgress.ps1
|
|
REM
|
|
REM All polling, status display, sync triggering, and reboot detection lives in
|
|
REM the PowerShell monitor. This .bat just handles:
|
|
REM 1. Self-elevate to admin
|
|
REM 2. Invoke the monitor (which renders QR + 5-phase status table)
|
|
REM 3. Branch on the monitor's exit code:
|
|
REM 0 = post-reboot install complete, "done" message and exit
|
|
REM 2 = pre-reboot deployment done, prompt for reboot
|
|
REM else = error, pause so the user can read it
|
|
REM
|
|
REM The monitor lives at C:\Enrollment\shopfloor-setup\Shopfloor\Monitor-IntuneProgress.ps1.
|
|
REM This .bat gets copied to the user's desktop by Run-ShopfloorSetup.ps1, so
|
|
REM %~dp0 doesn't necessarily point at the shopfloor-setup tree - we use the
|
|
REM absolute path to find the monitor instead.
|
|
|
|
setlocal
|
|
title Intune Policy Sync
|
|
|
|
REM Monitor lives under lib\ to keep it OUT of the dispatcher's baseline scan.
|
|
REM Run-ShopfloorSetup.ps1 does Get-ChildItem -Filter "*.ps1" on the Shopfloor\
|
|
REM dir (non-recursive) and runs every script it finds - if Monitor-IntuneProgress
|
|
REM lived there, the dispatcher would invoke it as a baseline script and hang the
|
|
REM whole shopfloor setup forever (it's an infinite poll loop, never returns).
|
|
set "MONITOR=C:\Enrollment\shopfloor-setup\Shopfloor\lib\Monitor-IntuneProgress.ps1"
|
|
|
|
REM Self-elevate to administrator
|
|
net session >nul 2>&1
|
|
if errorlevel 1 (
|
|
powershell -Command "Start-Process '%~f0' -Verb RunAs"
|
|
exit /b
|
|
)
|
|
|
|
if not exist "%MONITOR%" (
|
|
echo ERROR: Monitor not found at:
|
|
echo %MONITOR%
|
|
echo.
|
|
echo Was the shopfloor-setup tree staged correctly?
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%MONITOR%"
|
|
set "MONITOR_EXIT=%errorlevel%"
|
|
|
|
echo.
|
|
if "%MONITOR_EXIT%"=="0" (
|
|
echo ========================================
|
|
echo Setup complete - no reboot needed
|
|
echo ========================================
|
|
echo.
|
|
echo The post-reboot DSC install phase is finished. The device is ready.
|
|
echo.
|
|
pause
|
|
exit /b 0
|
|
)
|
|
|
|
if "%MONITOR_EXIT%"=="2" (
|
|
echo ========================================
|
|
echo REBOOT REQUIRED
|
|
echo ========================================
|
|
echo.
|
|
echo The pre-reboot deployment phase is complete. You must reboot now to
|
|
echo start the post-reboot DSC install phase, which downloads device-config.yaml
|
|
echo and runs the per-app wrappers (Install-eDNC, Install-UDC, Install-VCRedists,
|
|
echo Install-OpenText, etc).
|
|
echo.
|
|
choice /c YN /m "Reboot now"
|
|
if errorlevel 2 (
|
|
echo Cancelled - reboot manually when ready.
|
|
pause
|
|
exit /b 0
|
|
)
|
|
shutdown /r /t 5
|
|
exit /b 0
|
|
)
|
|
|
|
echo ERROR: Monitor exited with code %MONITOR_EXIT%
|
|
pause
|
|
exit /b %MONITOR_EXIT%
|