Private/Get-UpgradeInitializationScriptConfig.ps1

function Get-UpgradeInitializationScriptConfig {
    param (
        [Parameter(Mandatory=$true)]
        [string] $configFile
    )

    # Commented to make sure that the variable is always being refreshed.
    # if (!((Get-Variable -scope Script upgradeInitializationScriptConfig -ErrorAction SilentlyContinue) -and $upgradeInitializationScriptConfig)) {
        Set-Variable -scope Script -Name upgradeInitializationScriptConfig -Value @{
            "Environment" = @{
                "Multitenant" = $false
            }
            "SQL" = @{
                "Server" = ""
                "Instance" = ""
                "Database" = ""
            }
            "FromBC" = @{
                "ServerInstance" = ""
                "Version" = ""
                "Country" = ""
                "ServerPath" = ""
                "ClientPath" = ""
            }
            "ToBC" = @{
                "ServerInstance" = ""
                "Version" = ""
                "Country" = ""
                "LSVersion" = ""
                "ServerPath" = ""
            }
            "CustomExtensions" = @(
                @{
                    "AppId" = ""
                    "AppName" = ""
                    "AppPublisher" = ""
                    "AppVersion" = ""
                }
            )
        }

        if (Test-Path $configFile) {
            try {
                $savedConfig = Get-Content $configFile | ConvertFrom-Json
                if ("$savedConfig") {
                    $keys = $upgradeInitializationScriptConfig.Keys | ForEach-Object { $_ }
                    $keys | ForEach-Object {
                        if ($savedConfig.PSObject.Properties.Name -eq "$_") {
                            if (!$silent) {
                                Write-Host "Setting $_ = $($savedConfig."$_")"
                            }
                            $upgradeInitializationScriptConfig."$_" = $savedConfig."$_"
                        }
                    }
                }
            }
            catch {
                throw "Error reading configuration file $configFile, cannot execute function. Error: $_."
            }
        }
        Export-ModuleMember -Variable upgradeInitializationScriptConfig
    # }
}

Export-ModuleMember -Function New-UpgradeInitializationScriptFromConfigFile