Three optimization batches from the pipeline audit:
1. Shared Update-MachineNumber.ps1 helper (lib/)
Extracts duplicated machine-number update logic from Configure-PC.ps1,
Check-MachineNumber.ps1, and Set-MachineNumber.ps1 into a shared
dot-sourceable helper at Shopfloor/lib/Update-MachineNumber.ps1.
Exports:
Get-CurrentMachineNumber → @{ Udc = $string; Ednc = $string }
Update-MachineNumber -NewNumber <n> [-Site <s>] → @{ UdcUpdated; EdncUpdated; Errors }
All three consumers now dot-source the helper instead of duplicating
~50 lines each. Set-MachineNumber.ps1 also migrated from inline
Get-SiteConfig to dot-sourcing Get-PCProfile.ps1 for consistency.
2. Site-config integration for remaining scripts
Setup-OpenText.ps1: exclude lists (profiles + shortcuts) now read from
site-config.json opentext section, falling back to West Jefferson
defaults. Inline Get-SiteConfig since the script runs from
C:\PreInstall\installers\opentext\ (can't dot-source Get-PCProfile).
00-PreInstall-MachineApps.ps1: after parsing preinstall.json, scans
InstallArgs for "West Jefferson" and replaces with site-config
siteName if different. Inline Get-SiteConfig for same reason.
3. Placeholder type-specific directories
Created skeleton 01-Setup-*.ps1 scripts for all PC types so the
directory structure is in place and Run-ShopfloorSetup's type-specific
loop has something to iterate over:
Genspect/01-Setup-Genspect.ps1
Keyence/01-Setup-Keyence.ps1
WaxAndTrace/01-Setup-WaxAndTrace.ps1
Lab/01-Setup-Lab.ps1
Each logs a "no type-specific apps configured yet" banner and exits.
Fill in app installs when details are finalized; for share-based
installs, copy the CMM/01-Setup-CMM.ps1 pattern.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
88 lines
3.2 KiB
PowerShell
88 lines
3.2 KiB
PowerShell
# Set-MachineNumber.ps1 - Update UDC + eDNC machine number on a Standard shopfloor PC
|
|
#
|
|
# Purpose:
|
|
# Both UDC and eDNC use the same per-machine identifier ("Workstation Number" /
|
|
# "Machine Number"). On Standard PCs imaged via PXE preinstall, both are installed
|
|
# with a placeholder. When the PC is brought to its physical machine and assigned
|
|
# a real number, this helper updates both apps in one step.
|
|
#
|
|
# Persistence locations updated:
|
|
# 1. UDC: C:\ProgramData\UDC\udc_settings.json (GeneralSettings.MachineNumber)
|
|
# 2. eDNC: HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines\DNC\General\MachineNo
|
|
#
|
|
# After updating, kills any running UDC.exe and relaunches it with the new args
|
|
# so the in-memory state matches the persisted value.
|
|
#
|
|
# Run as SupportUser (admin). Requires write access to ProgramData and HKLM.
|
|
|
|
Add-Type -AssemblyName Microsoft.VisualBasic
|
|
Add-Type -AssemblyName System.Windows.Forms
|
|
|
|
. "$PSScriptRoot\..\Shopfloor\lib\Get-PCProfile.ps1"
|
|
. "$PSScriptRoot\..\Shopfloor\lib\Update-MachineNumber.ps1"
|
|
|
|
$site = if ($siteConfig) { $siteConfig.siteName } else { 'West Jefferson' }
|
|
|
|
# --- Read current values for display ---
|
|
$currentMN = Get-CurrentMachineNumber
|
|
$currentUdc = $currentMN.Udc
|
|
$currentEdnc = $currentMN.Ednc
|
|
|
|
# --- Show prompt with current state ---
|
|
$promptLines = @()
|
|
$promptLines += "Current UDC machine number: $(if ($currentUdc) { $currentUdc } else { '(not set)' })"
|
|
$promptLines += "Current eDNC machine number: $(if ($currentEdnc) { $currentEdnc } else { '(not set)' })"
|
|
$promptLines += ""
|
|
$promptLines += "Enter the new Machine Number for this PC:"
|
|
$prompt = $promptLines -join "`n"
|
|
|
|
$new = [Microsoft.VisualBasic.Interaction]::InputBox($prompt, "Set Machine Number", "")
|
|
|
|
if ([string]::IsNullOrWhiteSpace($new)) {
|
|
Write-Host "Cancelled."
|
|
exit 0
|
|
}
|
|
|
|
$new = $new.Trim()
|
|
|
|
# --- Validate: digits only (loosen if you need alphanumerics) ---
|
|
if ($new -notmatch '^\d+$') {
|
|
[System.Windows.Forms.MessageBox]::Show(
|
|
"Machine number must be digits only.`n`nYou entered: '$new'",
|
|
"Invalid Machine Number",
|
|
[System.Windows.Forms.MessageBoxButtons]::OK,
|
|
[System.Windows.Forms.MessageBoxIcon]::Error
|
|
) | Out-Null
|
|
exit 1
|
|
}
|
|
|
|
$mnResult = Update-MachineNumber -NewNumber $new -Site $site
|
|
|
|
$results = @()
|
|
if ($mnResult.UdcUpdated) {
|
|
Write-Host "UDC: $currentUdc -> $new"
|
|
$results += "UDC updated to $new"
|
|
} elseif (-not (Test-Path 'C:\ProgramData\UDC\udc_settings.json')) {
|
|
$results += "UDC: settings file missing (run UDC.exe once first)"
|
|
}
|
|
if ($mnResult.EdncUpdated) {
|
|
Write-Host "eDNC: $currentEdnc -> $new"
|
|
$results += "eDNC updated to $new"
|
|
} elseif (-not (Test-Path 'HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines\DNC\General')) {
|
|
$results += "eDNC: registry key missing (eDNC not installed?)"
|
|
}
|
|
foreach ($err in $mnResult.Errors) {
|
|
Write-Warning $err
|
|
$results += $err
|
|
}
|
|
if ($mnResult.UdcUpdated) { Write-Host "UDC.exe relaunched." }
|
|
|
|
# --- Show summary ---
|
|
$summary = ($results -join "`n") + "`n`nTo apply eDNC changes, restart any running DncMain.exe."
|
|
[System.Windows.Forms.MessageBox]::Show(
|
|
$summary,
|
|
"Set Machine Number - Done",
|
|
[System.Windows.Forms.MessageBoxButtons]::OK,
|
|
[System.Windows.Forms.MessageBoxIcon]::Information
|
|
) | Out-Null
|