public/functions/Import-PowerStubConfiguration.ps1
|
<#
.SYNOPSIS Imports PowerStub configuration from the configuration file or resets to defaults. .DESCRIPTION Imports the PowerStub configuration from PowerStub.json in the module configuration directory. Automatically migrates configuration from legacy module version locations if found. Supports resetting the configuration to defaults and re-exporting to the config file. .PARAMETER Reset If specified, resets the configuration to defaults, clears all custom settings, and saves the defaults to the config file. .INPUTS None. You cannot pipe objects to this function. .OUTPUTS None. Updates the in-memory configuration from the file or defaults. .EXAMPLE Import-PowerStubConfiguration Loads the configuration from PowerStub.json file. .EXAMPLE Import-PowerStubConfiguration -Reset Resets the configuration to factory defaults and saves to the config file. #> function Import-PowerStubConfiguration { param ( [switch] $reset ) if ($reset) { $Script:PSTBSettings = Get-PowerStubConfigurationDefaults Export-PowerStubConfiguration return } $noImport = Get-PowerStubConfigurationKey 'InternalConfigKeys' $fileName = Get-PowerStubConfigurationKey 'ConfigFile' $legacyFileName = Get-PowerStubConfigurationKey 'LegacyConfigFile' # Ensure config directory exists $configDir = Split-Path $fileName -Parent if (-not (Test-Path $configDir)) { New-Item -ItemType Directory -Path $configDir -Force | Out-Null Write-Verbose "Created config directory: $configDir" } Write-Verbose "Current Configuration:" Write-Verbose ($Script:PSTBSettings | ConvertTo-Json) # Check for config file, with migration from legacy location $configToLoad = $null if (Test-Path $fileName) { $configToLoad = $fileName Write-Verbose "Using config file: $fileName" } elseif ($legacyFileName -and (Test-Path $legacyFileName)) { # Migrate from legacy location (version-specific module folder) Write-Host "Migrating PowerStub config from legacy location..." -ForegroundColor Yellow Write-Verbose "Legacy config found at: $legacyFileName" Copy-Item -Path $legacyFileName -Destination $fileName -Force $configToLoad = $fileName Write-Host " Config migrated to: $fileName" -ForegroundColor Green # Also check parent module folders for other version configs to migrate $moduleParent = Split-Path $Script:ModulePath -Parent $otherVersionConfigs = Get-ChildItem -Path $moduleParent -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -ne (Split-Path $Script:ModulePath -Leaf) } | ForEach-Object { Join-Path $_.FullName 'PowerStub.json' } | Where-Object { Test-Path $_ } if ($otherVersionConfigs) { Write-Verbose "Found configs in other module versions: $($otherVersionConfigs -join ', ')" } } if ($configToLoad) { Write-Verbose "Importing File: $configToLoad" $newConfig = Get-Content -Path $configToLoad -Raw | ConvertFrom-Json | ConvertTo-Hashtable foreach ($key in $newConfig.Keys) { #do not import values for internal keys if ($noImport -contains $key) { continue } Write-Verbose "Importing Configuration Key: $key" $Script:PSTBSettings[$key] = $newConfig[$key] } } else { Write-Verbose "No configuration file found. Using defaults." } Write-Verbose "New Configuration:" Write-Verbose ($Script:PSTBSettings | ConvertTo-Json) } |