Shopfloor imaging: CMM type, Configure-PC override fix, serial drivers
- CMM imaging pipeline: WinPE-staged bootstrap + on-logon enforcer against tsgwp00525 share, manifest-driven installer runner shared via Install-FromManifest.ps1. Installs PC-DMIS 2016/2019 R2, CLM 1.8, goCMM; enables .NET 3.5 prereq; registers GE CMM Enforce logon task for ongoing version enforcement. - Shopfloor serial drivers: StarTech PCIe serial + Prolific PL2303 USB-to-serial via Install-Drivers.cmd wrapper calling pnputil /add-driver /subdirs /install. Scoped to Standard PCs. - OpenText extended to CMM/Keyence/Genspect/WaxAndTrace via preinstall.json PCTypes; Defect Tracker added to CMM profile desktopApps + taskbarPins. - Configure-PC startup-item toggle now persists across the logon sweep via C:\\ProgramData\\GE\\Shopfloor\\startup-overrides.json; 06-OrganizeDesktop Phase 3 respects suppressed items. - Get-ProfileValue helper added to Shopfloor/lib/Get-PCProfile.ps1; distinguishes explicit empty array from missing key (fixes Lab getting Plant Apps in startup because empty array was falsy). - 06-OrganizeDesktop gains transcript logging at C:\\Logs\\SFLD\\ 06-OrganizeDesktop.log and now deletes the stale Shopfloor Intune Sync task when C:\\Enrollment\\sync-complete.txt is present (task was registered with Limited principal and couldn't self-unregister). - startnet.cmd CMM xcopy block (gated on pc-type=CMM) stages the bundle to W:\\CMM-Install during WinPE. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,9 +18,24 @@
|
||||
# 3. (hardcoded fallback in the calling script)
|
||||
#
|
||||
# Usage pattern in consuming scripts:
|
||||
# $items = if ($pcProfile -and $pcProfile.startupItems) { $pcProfile.startupItems }
|
||||
# elseif ($siteConfig -and $siteConfig.startupItems) { $siteConfig.startupItems }
|
||||
# else { $null } # trigger hardcoded fallback
|
||||
# $items = Get-ProfileValue 'startupItems'
|
||||
# if ($null -ne $items) { ... } else { <hardcoded fallback> }
|
||||
#
|
||||
# Get-ProfileValue distinguishes "not set" ($null) from "explicitly empty"
|
||||
# (@()) so a profile can opt out of a site-wide default by setting the
|
||||
# key to []. Do NOT use truthiness checks like `if ($pcProfile.startupItems)`
|
||||
# because an empty array is falsy and would fall through to site defaults.
|
||||
|
||||
function Get-ProfileValue {
|
||||
param([Parameter(Mandatory)][string]$Key)
|
||||
if ($pcProfile -and ($pcProfile.PSObject.Properties.Name -contains $Key)) {
|
||||
return ,@($pcProfile.$Key)
|
||||
}
|
||||
if ($siteConfig -and ($siteConfig.PSObject.Properties.Name -contains $Key)) {
|
||||
return ,@($siteConfig.$Key)
|
||||
}
|
||||
return $null
|
||||
}
|
||||
|
||||
function Get-SiteConfig {
|
||||
$configPath = 'C:\Enrollment\site-config.json'
|
||||
|
||||
@@ -561,9 +561,11 @@ function Invoke-SetupComplete {
|
||||
|
||||
if ($AsTask) {
|
||||
# Write completion marker so future logon-triggered runs exit
|
||||
# immediately. We can't Unregister-ScheduledTask because the task
|
||||
# runs as BUILTIN\Users (Limited) which lacks permission to delete
|
||||
# tasks. The marker file makes the task a harmless no-op.
|
||||
# immediately. We can't Unregister-ScheduledTask ourselves because
|
||||
# this task runs as BUILTIN\Users (Limited) which lacks permission
|
||||
# to delete tasks. 06-OrganizeDesktop.ps1 (which runs as SYSTEM via
|
||||
# its own sweep task on every logon) watches for this marker and
|
||||
# deletes the stale Shopfloor Intune Sync task when it sees us.
|
||||
try {
|
||||
Set-Content -LiteralPath $syncCompleteMarker -Value (Get-Date -Format 'o') -Force
|
||||
Write-Host "Sync complete marker written." -ForegroundColor Green
|
||||
|
||||
Reference in New Issue
Block a user