# 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 }