Adds a pcProfiles section to site-config.json that lets each PC type (and
optional sub-type) override startupItems, taskbarPins, and desktopApps.
Scripts resolve: pcProfile > site-wide default > hardcoded fallback.
New shared helper: Shopfloor/lib/Get-PCProfile.ps1
Dot-sourced by consuming scripts. Reads pc-type.txt + pc-subtype.txt,
builds a profile key (e.g. "Standard-Machine"), and looks it up in
site-config.json pcProfiles. Exports $siteConfig, $pcType, $pcSubtype,
$profileKey, $pcProfile for the caller to use.
Replaces the inline Get-SiteConfig function that was copy-pasted into
each script. Scripts now do:
. "$PSScriptRoot\lib\Get-PCProfile.ps1"
instead of duplicating the loader.
startnet.cmd changes:
- Added Lab as PC type option (7)
- Standard now has a sub-type menu: Timeclock / Machine
- Display sub-type menu also writes PCSUBTYPE for consistency
- pc-subtype.txt written alongside pc-type.txt when sub-type selected
- site-config.json copied from enrollment share to W:\Enrollment\
site-config.json v2.0:
- New pcProfiles section with profiles for:
Standard-Timeclock, Standard-Machine, CMM, Genspect, Keyence,
WaxAndTrace, Lab, Display-Lobby, Display-Dashboard
- CMM/Genspect/Keyence/WaxAndTrace profiles have TODO comments for
type-specific apps (placeholder with WJ Shopfloor baseline only)
- Lab/Display profiles have empty startupItems and desktopApps
- Top-level startupItems/taskbarPins/desktopApps remain as site-wide
defaults (used when no profile matches)
Updated scripts:
06-OrganizeDesktop.ps1 - desktopApps from profile > site > hardcoded
07-TaskbarLayout.ps1 - taskbarPins from profile > site > hardcoded
08-EdgeDefaultBrowser.ps1 - uses shared profile loader
Configure-PC.ps1 - startupItems from profile > site > hardcoded
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
69 lines
2.8 KiB
PowerShell
69 lines
2.8 KiB
PowerShell
# Get-PCProfile.ps1 - Shared helper for resolving the active PC profile
|
|
# from site-config.json. Dot-source this from any script that needs
|
|
# profile-aware configuration:
|
|
#
|
|
# . "$PSScriptRoot\lib\Get-PCProfile.ps1" (from Shopfloor\ scripts)
|
|
# . "$PSScriptRoot\Get-PCProfile.ps1" (from lib\ scripts)
|
|
#
|
|
# After dot-sourcing, these variables are available:
|
|
# $siteConfig - full parsed site-config.json (or $null)
|
|
# $pcType - from pc-type.txt (e.g. "Standard", "CMM", "Display")
|
|
# $pcSubtype - from pc-subtype.txt (e.g. "Timeclock", "Machine", "Lobby")
|
|
# $profileKey - lookup key (e.g. "Standard-Machine", "CMM", "Display-Lobby")
|
|
# $pcProfile - the matched profile object from pcProfiles, or $null
|
|
#
|
|
# Resolution order for any config key (e.g. startupItems):
|
|
# 1. $pcProfile.startupItems (profile-specific override)
|
|
# 2. $siteConfig.startupItems (site-wide default)
|
|
# 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
|
|
|
|
function Get-SiteConfig {
|
|
$configPath = 'C:\Enrollment\site-config.json'
|
|
if (-not (Test-Path -LiteralPath $configPath)) {
|
|
Write-Host "site-config.json not found - using defaults" -ForegroundColor DarkGray
|
|
return $null
|
|
}
|
|
try {
|
|
return (Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json)
|
|
} catch {
|
|
Write-Warning "Failed to parse site-config.json: $_"
|
|
return $null
|
|
}
|
|
}
|
|
|
|
$siteConfig = Get-SiteConfig
|
|
|
|
# Read PC type + sub-type from the files startnet.cmd wrote during imaging
|
|
$pcType = ''
|
|
$pcSubtype = ''
|
|
$typeFile = 'C:\Enrollment\pc-type.txt'
|
|
$subtypeFile = 'C:\Enrollment\pc-subtype.txt'
|
|
|
|
if (Test-Path -LiteralPath $typeFile) {
|
|
$pcType = (Get-Content -LiteralPath $typeFile -First 1 -ErrorAction SilentlyContinue).Trim()
|
|
}
|
|
if (Test-Path -LiteralPath $subtypeFile) {
|
|
$pcSubtype = (Get-Content -LiteralPath $subtypeFile -First 1 -ErrorAction SilentlyContinue).Trim()
|
|
}
|
|
|
|
# Build the profile key: "Standard-Machine", "CMM", "Display-Lobby", etc.
|
|
$profileKey = if ($pcSubtype) { "$pcType-$pcSubtype" } else { $pcType }
|
|
|
|
# Look up the profile in pcProfiles. Fall back to $null (callers use
|
|
# site-wide defaults or hardcoded values).
|
|
$pcProfile = $null
|
|
if ($siteConfig -and $siteConfig.pcProfiles -and $profileKey) {
|
|
$pcProfile = $siteConfig.pcProfiles.$profileKey
|
|
}
|
|
|
|
if ($pcProfile) {
|
|
Write-Host "PC profile: $profileKey" -ForegroundColor Cyan
|
|
} elseif ($profileKey) {
|
|
Write-Host "PC profile '$profileKey' not found in site-config.json - using site defaults" -ForegroundColor DarkGray
|
|
}
|