Public/Utility/Set-Config.ps1

<#
    .SYNOPSIS
    Sets the HSDP-IAM powershell module configuration

    .DESCRIPTION
    This module stores configuration in a script level varaible to accessing configuration
    across multiple cmdlets easier.

    This cmdlet sets the HSDP-IAM powershell module configuration hashtable.

    .EXAMPLE
    Set-Config $config
#>

function Set-Config  {

    [CmdletBinding(SupportsShouldProcess, ConfirmImpact='Low')]
    param(
        [ValidateNotNullOrEmpty()]
        [PSObject]$Config,

        [Parameter()]
        [Switch]
        $Force
    )

    begin {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Function started"
        if (-not $PSBoundParameters.ContainsKey('Verbose')) {
            $VerbosePreference = $PSCmdlet.SessionState.PSVariable.GetValue('VerbosePreference')
        }
        if (-not $PSBoundParameters.ContainsKey('Confirm')) {
            $ConfirmPreference = $PSCmdlet.SessionState.PSVariable.GetValue('ConfirmPreference')
        }
        if (-not $PSBoundParameters.ContainsKey('WhatIf')) {
            $WhatIfPreference = $PSCmdlet.SessionState.PSVariable.GetValue('WhatIfPreference')
        }
    }

    process {
        Write-Debug "[$($MyInvocation.MyCommand.Name)] PSBoundParameters: $($PSBoundParameters | Out-String)"
        if ($Force -or $PSCmdlet.ShouldProcess("ShouldProcess?")) {
            $ConfirmPreference = 'High'
            Set-Variable -Name __config -Scope Script -Value $config
            # Clear the cached values so future requests re-authenticate
            if (Get-Variable -Scope Script -ErrorAction Ignore -Name __authorization_header_value) {
                Remove-Variable -Name __authorization_header_value -Scope script
            }
            if (Get-Variable -Scope Script -ErrorAction Ignore -Name __access_token_expires_at) {
                Remove-Variable -Name __access_token_expires_at -Scope script
            }
            if (Get-Variable -Scope Script -ErrorAction Ignore -Name __auth) {
                Remove-Variable -Name __auth -Scope script
            }
            Get-AuthorizationHeader | Out-Null
        }
    }

    end {
        Write-Verbose "[$($MyInvocation.MyCommand.Name)] Complete"
    }
}