Private/Config/Initialize-SavedConfig.ps1
|
<#
Copyright (c) 2025-2026 Robert Faddes SPDX-License-Identifier: MPL-2.0 #> <# .SYNOPSIS Loads persisted configuration from disk and applies it to session-scoped variables. .DESCRIPTION Reads the saved configuration file via Read-ConfigFile and populates all Script-scoped configuration variables used throughout the session. This includes platform, page size, token expiry, API retry settings, and the active throttle profile. If no configuration file is found, the throttle profile defaults to 'DefaultProfile' and all other session variables remain at their module-initialisation defaults. If a configuration file is present but an error occurs during application, a non-terminating error is written and the session may be partially configured. Called once during module load, after all Private and Public functions have been dot-sourced. #> function Initialize-SavedConfig { [CmdletBinding()] param () Write-Verbose "Attempting to load configuration file..." $SavedConfig = Read-ConfigFile if ($null -ne $SavedConfig) { try { switch ($SavedConfig.Keys) { 'Platform' { $Script:ConfigPlatform = $SavedConfig.Platform $Script:SessionPlatform = $SavedConfig.Platform Write-Verbose "Platform: $($Script:ConfigPlatform)" } 'PageSize' { $Script:ConfigPageSize = $SavedConfig.PageSize $Script:SessionPageSize = $SavedConfig.PageSize Write-Verbose "PageSize: $($Script:ConfigPageSize)" } 'TokenExpireHours' { $Script:TokenExpireHours = $SavedConfig.TokenExpireHours $Script:ConfigTokenExpireHours = $SavedConfig.TokenExpireHours Write-Verbose "TokenExpireHours: $($Script:TokenExpireHours)" } 'ApiMaxRetries' { $Script:ApiMethodRetry.MaxRetries = $SavedConfig.ApiMaxRetries $Script:ConfigApiMaxRetries = $SavedConfig.ApiMaxRetries Write-Verbose "ApiMaxRetries: $($Script:ApiMethodRetry.MaxRetries)" } 'ApiRetryIntervalSeconds' { $Script:ApiMethodRetry.RetryIntervalSeconds = $SavedConfig.ApiRetryIntervalSeconds $Script:ConfigApiRetryIntervalSeconds = $SavedConfig.ApiRetryIntervalSeconds Write-Verbose "ApiRetryIntervalSeconds: $($Script:ApiMethodRetry.RetryIntervalSeconds)" } 'ApiTimeoutSeconds' { $Script:ApiMethodRetry.TimeoutSeconds = $SavedConfig.ApiTimeoutSeconds $Script:ConfigApiTimeoutSeconds = $SavedConfig.ApiTimeoutSeconds Write-Verbose "ApiTimeoutSeconds: $($Script:ApiMethodRetry.TimeoutSeconds)" } 'TokenRefreshBufferMinutes' { $Script:TokenRefreshBufferMinutes = $SavedConfig.TokenRefreshBufferMinutes $Script:ConfigTokenRefreshBufferMinutes = $SavedConfig.TokenRefreshBufferMinutes Write-Verbose "TokenRefreshBufferMinutes: $($Script:TokenRefreshBufferMinutes)" } 'ThrottleProfile' { Import-ThrottleProfile -Config $SavedConfig } } } catch { Write-Error "Error loading saved config $($Script:ConfigPath). Session settings may be incomplete: $($_.Exception.Message)" } } else { $Script:RMMThrottle.Profile = 'DefaultProfile' Write-Verbose "No configuration file found; using default settings." } } # SIG # Begin signature block # MIIF+wYJKoZIhvcNAQcCoIIF7DCCBegCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBprV36wMdsCLm/ # szp/XzU64V7klqdsh/7639KLQu/TDKCCA04wggNKMIICMqADAgECAhB464iXHfI6 # gksEkDDTyrNsMA0GCSqGSIb3DQEBCwUAMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRk # ZXMxIzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nMB4XDTI2MDMz # MTAwMTMzMFoXDTI4MDMzMTAwMjMzMFowPTEWMBQGA1UECgwNUm9iZXJ0IEZhZGRl # czEjMCEGA1UEAwwaRGF0dG9STU0uQ29yZSBDb2RlIFNpZ25pbmcwggEiMA0GCSqG # SIb3DQEBAQUAA4IBDwAwggEKAoIBAQChn1EpMYQgl1RgWzQj2+wp2mvdfb3UsaBS # nxEVGoQ0gj96tJ2MHAF7zsITdUjwaflKS1vE6wAlOg5EI1V79tJCMxzM0bFpOdR1 # L5F2HE/ovIAKNkHxFUF5qWU8vVeAsOViFQ4yhHpzLen0WLF6vhmc9eH23dLQy5fy # tELZQEc2WbQFa4HMAitP/P9kHAu6CUx5s4woLIOyyR06jkr3l9vk0sxcbCxx7+dF # RrsSLyPYPH+bUAB8+a0hs+6qCeteBuUfLvGzpMhpzKAsY82WZ3Rd9X38i32dYj+y # dYx+nx+UEMDLjDJrZgnVa8as4RojqVLcEns5yb/XTjLxDc58VatdAgMBAAGjRjBE # MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU # H+B0vf97dYXqdUX1YMcWhFsY6fcwDQYJKoZIhvcNAQELBQADggEBAJmD4EEGNmcD # 1JtFoRGxuLJaTHxDwBsjqcRQRE1VPZNGaiwIm8oSQdHVjQg0oIyK7SEb02cs6n6Y # NZbwf7B7WZJ4aKYbcoLug1k1x9SoqwBmfElECeJTKXf6dkRRNmrAodpGCixR4wMH # KXqwqP5F+5j7bdnQPiIVXuMesxc4tktz362ysph1bqKjDQSCBpwi0glEIH7bv5Ms # Ey9Gl3fe+vYC5W06d2LYVebEfm9+7766hsOgpdDVgdtnN+e6uwIJjG/6PTG6TMDP # y+pr5K6LyUVYJYcWWUTZRBqqwBHiLGekPbxrjEVfxUY32Pq4QfLzUH5hhUCAk4HN # XpF9pOzFLMUxggIDMIIB/wIBATBRMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRkZXMx # IzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nAhB464iXHfI6gksE # kDDTyrNsMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKEC # gAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG # CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKzGtH2xGjMygnMwFSHvUTbCmleS # ix/0kkojiWlf16MyMA0GCSqGSIb3DQEBAQUABIIBAItsK8g+Np4PBKZbgf0Dv9LI # WseuVi5YeVz1uTFQoh/oyNIe26GYRzZrhxm/UDav8VlyUQyVDkVGIGiR6TUPhh2g # xND+f58CIdkydVoGiSekLYd8KbSD7EsBgbS2R8BpCKHaU6zPjdtjVlGUTttPJaHY # K2Io34cVnE2OrxuGBF+q9Vc3gAGdr6GeFeNJveVu7+SRprC6EA8i5A9dvu89qBQs # mFxP1bvZQqBysDo7A6Cuw96ZgzwRibcwEhiVnljXeJXpaqm2PfCQ6JISGZWRryqb # f7DLkTwveUMF3eFwHnBKfCzfxwFCeM9t7JVBjxQ5ZzN3sGfkznuPLMQnp+JisLg= # SIG # End signature block |