Shell defaults + eDNC reg restore from machine-number backups

- 03-ShellDefaults.ps1: Default-User TaskbarAl=0 (left), HKLM policies to
  hide Start Recommended section, kill Bing web search + suggestions,
  disable Cortana. LTSC-honoured; runs fleet-wide via baseline loop.

- ntlars-backups/: 147 per-machine eDNC registry backups renamed to
  flat <MachineNumber>.reg scheme. Historical off-by-one entries from
  the original dump rewritten to match CSV-target MachineNo.

- Standard/03-RestoreEDncConfig.ps1: at imaging time, if tech typed a
  real machine number at PXE (not 9999), import <num>.reg from the local
  staged copy. Restores eFocas IP, PPDCS serial, Hssb relays -- not just
  the bare MachineNo. Skipped on Timeclock / 9999 / missing backup.

- Update-MachineNumber.ps1: when tech later sets a real number from 9999,
  pull <num>.reg from tsgwp00525 SFLD share (ntlarsBackupSharePath in
  site-config) and reg-import it before writing the new MachineNo.

- Restore-EDncReg.ps1: shared helper (Mount-SFLDShare + Import-EDncRegBackup)
  used by both callers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-04-15 15:42:21 -04:00
parent 67845372b2
commit 6db170bf54
152 changed files with 313 additions and 1 deletions

View File

@@ -0,0 +1,86 @@
# 03-RestoreEDncConfig.ps1 - Restore per-machine eDNC config from .reg backup.
#
# Runs at shopfloor-setup time AFTER 01-eDNC.ps1 has installed eDNC. If the
# tech typed a real machine number at the PXE menu (not left blank -> 9999),
# look for a .reg backup matching that number on the PXE-local copy of the
# setup tree and import it. That restores everything eDNC-side the backup
# captured: eFocas IP/port, PPDCS serial (baud/parity/bits), Hssb KRelay1,
# etc. - instead of the reimaged PC coming up on factory defaults.
#
# After reg import, the tech-typed machine number is written to HKLM and to
# UDC's settings JSON to guarantee the current number wins over whatever the
# backup happened to contain (off-by-one backups exist in the historical
# dump; see ntlars-fixed/ work on the PXE host).
#
# Skipped when:
# - pc-subtype != Machine (Timeclock PCs do not use a machine number)
# - machine-number.txt missing / empty / 9999 (tech declined to set one)
# - ntlars-backups/ folder missing from the staged setup tree
# - no matching .reg file on disk for this machine number
$ErrorActionPreference = 'Continue'
$logDir = 'C:\Logs\SFLD'
if (-not (Test-Path $logDir)) { try { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } catch {} }
try { Start-Transcript -Path (Join-Path $logDir '03-RestoreEDncConfig.log') -Append -Force | Out-Null } catch {}
Write-Host "=== Restore eDNC config from backup ==="
# ---- Sub-type gate ----
$subtypeFile = 'C:\Enrollment\pc-subtype.txt'
if (Test-Path $subtypeFile) {
$subtype = (Get-Content $subtypeFile -First 1 -ErrorAction SilentlyContinue).Trim()
if ($subtype -eq 'Timeclock') {
Write-Host "Standard-Timeclock - skipping."
try { Stop-Transcript | Out-Null } catch {}
return
}
}
# ---- Read machine number captured at PXE time ----
$mnFile = 'C:\Enrollment\machine-number.txt'
if (-not (Test-Path $mnFile)) {
Write-Host "machine-number.txt not present - skipping (tech did not set one)."
try { Stop-Transcript | Out-Null } catch {}
return
}
$machineNum = (Get-Content $mnFile -First 1 -ErrorAction SilentlyContinue).Trim()
if (-not $machineNum -or $machineNum -eq '9999') {
Write-Host "Machine number is '$machineNum' (placeholder or empty) - skipping."
try { Stop-Transcript | Out-Null } catch {}
return
}
Write-Host "Machine number: $machineNum"
# ---- Locate local backup root (staged from PXE during imaging) ----
$backupRoot = 'C:\Enrollment\shopfloor-setup\Standard\ntlars-backups'
if (-not (Test-Path $backupRoot)) {
Write-Host "ntlars-backups folder not staged at $backupRoot - skipping."
try { Stop-Transcript | Out-Null } catch {}
return
}
. "$PSScriptRoot\..\Shopfloor\lib\Restore-EDncReg.ps1"
$imported = Import-EDncRegBackup -SourceRoot $backupRoot -MachineNumber $machineNum
if (-not $imported) {
Write-Host "No backup imported - leaving eDNC at installer defaults."
try { Stop-Transcript | Out-Null } catch {}
return
}
# ---- Tech-typed number wins: overwrite MachineNo in both eDNC and UDC. ----
# The imported .reg probably already has the right number (we rewrote the
# historical dump) but off-by-one backups exist, and this is cheap insurance.
. "$PSScriptRoot\..\Shopfloor\lib\Update-MachineNumber.ps1"
$current = Get-CurrentMachineNumber
Write-Host "Post-import state: UDC='$($current.Udc)' eDNC='$($current.Ednc)'"
$result = Update-MachineNumber -NewNumber $machineNum
if ($result.UdcUpdated) { Write-Host " UDC MachineNumber set to $machineNum" }
if ($result.EdncUpdated) { Write-Host " eDNC MachineNo set to $machineNum" }
foreach ($err in $result.Errors) { Write-Warning " $err" }
try { Stop-Transcript | Out-Null } catch {}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More