diff --git a/playbook/shopfloor-setup/Run-ShopfloorSetup.ps1 b/playbook/shopfloor-setup/Run-ShopfloorSetup.ps1 index 6cd59a7..999911e 100644 --- a/playbook/shopfloor-setup/Run-ShopfloorSetup.ps1 +++ b/playbook/shopfloor-setup/Run-ShopfloorSetup.ps1 @@ -1,6 +1,13 @@ # Run-ShopfloorSetup.ps1 - Dispatcher for shopfloor PC type setup # Runs Shopfloor baseline scripts first, then type-specific scripts on top. +param( + # Stage-Dispatcher.ps1 passes -FromDispatcher to bypass the stage-file + # gate below. When called by the unattend's FirstLogonCommands (no flag), + # the gate defers to the dispatcher if a stage file exists. + [switch]$FromDispatcher +) + # --- Stage-file gate --- # If run-enrollment.ps1 wrote a stage file, the imaging chain is managed by # Stage-Dispatcher.ps1 via RunOnce. Exit immediately so the FirstLogonCommands @@ -8,11 +15,13 @@ # the next boot. Without this gate, the unattend's FirstLogonCommands runs # this script right after run-enrollment in the same session (before the # PPKG reboot), bypassing the entire staged chain. -$stageFile = 'C:\Enrollment\setup-stage.txt' -if (Test-Path -LiteralPath $stageFile) { - $stage = (Get-Content -LiteralPath $stageFile -First 1 -ErrorAction SilentlyContinue) - Write-Host "Stage file found ($stage) - deferring to Stage-Dispatcher.ps1 on next logon." - exit 0 +if (-not $FromDispatcher) { + $stageFile = 'C:\Enrollment\setup-stage.txt' + if (Test-Path -LiteralPath $stageFile) { + $stage = (Get-Content -LiteralPath $stageFile -First 1 -ErrorAction SilentlyContinue) + Write-Host "Stage file found ($stage) - deferring to Stage-Dispatcher.ps1 on next logon." + exit 0 + } } # --- Transcript logging --- diff --git a/playbook/shopfloor-setup/Stage-Dispatcher.ps1 b/playbook/shopfloor-setup/Stage-Dispatcher.ps1 index e759843..8087cef 100644 --- a/playbook/shopfloor-setup/Stage-Dispatcher.ps1 +++ b/playbook/shopfloor-setup/Stage-Dispatcher.ps1 @@ -89,7 +89,10 @@ switch ($stage) { # Run-ShopfloorSetup.ps1 calls shutdown /r /t 10 at the end, which # gives us a ~10 second window after it returns to advance the stage # and re-register RunOnce before the reboot fires. - & $script + # -FromDispatcher bypasses the stage-file gate at the top of + # Run-ShopfloorSetup (which would otherwise see the stage file + # and exit immediately thinking it should defer to us). + & $script -FromDispatcher Write-Host "Run-ShopfloorSetup.ps1 finished. Advancing stage to sync-intune." Set-Content -LiteralPath $stageFile -Value 'sync-intune' -Force