Fix stage gate infinite loop: -FromDispatcher bypass

The stage-file gate in Run-ShopfloorSetup.ps1 would fire even when
called by Stage-Dispatcher.ps1 (because the stage file still contains
"shopfloor-setup"), causing an infinite exit loop.

Fix: Run-ShopfloorSetup now accepts -FromDispatcher switch. The gate
only fires when the switch is absent (i.e. when called by the unattend's
FirstLogonCommands). Stage-Dispatcher passes -FromDispatcher when
invoking Run-ShopfloorSetup, bypassing the gate.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-04-10 10:20:20 -04:00
parent 12bcc9b549
commit 3494aa0554
2 changed files with 18 additions and 6 deletions

View File

@@ -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 ---