Root cause fix: runner.go passed config as unevaluated PS expression via -File mode - scripts received a literal string instead of parsed object. Changed to -ConfigPath; scripts load JSON themselves via shared common.ps1 (Write-Log, Get-Feature, Load-Config). GUI now regenerates runtime config before run so user selections actually reach the scripts. Merged 04-default-profile + 05-personalization into single script (one hive load/unload, no Explorer restart, no hive contention). Deleted Deploy-Windows.ps1 (xetup.exe is sole entry point), 06-scheduled-tasks.ps1 (tasks caused more harm than good), 07-desktop-info.ps1 (replaced by BackInfo long ago). Step ordering: activation moved early, pcIdentity before WU (exit 9 on rename only when rename actually happened). Edge policies split into mandatory (telemetry, first-run) vs recommended (UI preferences user can override). Atera install uses Start-Process -Wait instead of fragile sleep. Updated config.json, tests, DefaultConfig to match current state. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
44 lines
1.4 KiB
PowerShell
44 lines
1.4 KiB
PowerShell
# common.ps1 - shared functions for all deployment scripts
|
|
# Dot-source at the top of each script: . "$PSScriptRoot\common.ps1"
|
|
# Requires $LogFile variable set in the calling script's scope.
|
|
|
|
$ErrorActionPreference = "Continue"
|
|
|
|
function Write-Log {
|
|
param([string]$Message, [string]$Level = "INFO")
|
|
$line = "[$(Get-Date -Format 'HH:mm:ss')] [$Level] $Message"
|
|
if ($LogFile) {
|
|
$null = New-Item -ItemType Directory -Force -Path (Split-Path $LogFile -Parent) -ErrorAction SilentlyContinue
|
|
Add-Content -Path $LogFile -Value $line -Encoding UTF8
|
|
}
|
|
Write-Output $line
|
|
}
|
|
|
|
function Get-Feature {
|
|
param([object]$Cfg, [string]$StepID, [string]$FeatureID, [bool]$Default = $true)
|
|
try {
|
|
if ($null -eq $Cfg) { return $Default }
|
|
$stepFeatures = $Cfg.features.$StepID
|
|
if ($null -eq $stepFeatures) { return $Default }
|
|
$val = $stepFeatures.$FeatureID
|
|
if ($null -eq $val) { return $Default }
|
|
return [bool]$val
|
|
} catch { return $Default }
|
|
}
|
|
|
|
function Load-Config {
|
|
param([string]$Path)
|
|
if (-not $Path -or -not (Test-Path $Path)) {
|
|
Write-Log "No config file at: $Path" -Level WARN
|
|
return $null
|
|
}
|
|
try {
|
|
$cfg = Get-Content $Path -Raw -Encoding UTF8 | ConvertFrom-Json
|
|
Write-Log "Config loaded from $Path" -Level INFO
|
|
return $cfg
|
|
}
|
|
catch {
|
|
Write-Log "Failed to parse config: $_" -Level ERROR
|
|
return $null
|
|
}
|
|
}
|