Public/oAuth2/Set-APIoAuth2Configuration.ps1

function Set-APIoAuth2Configuration {
    [CmdletBinding()]
    param (
        # Parameter help deprivateion
        [Parameter(Mandatory = $true)]
        [string]
        $ClientID,
        # Parameter help deprivateion
        [Parameter(Mandatory = $true)]
        [string]
        $ClientSecret, 
        # Parameter help deprivateion
        [Parameter(Mandatory = $true)]
        [string]
        $TokenEndpoint,
        # Parameter help deprivateion
        [Parameter(Mandatory = $false)]
        [string]
        $APIEndpoint,
        # Proxy Server
        [Parameter(Mandatory = $false)]
        [string]
        $Proxy,
        # USer Proxy Credentinals
        [Parameter(Mandatory = $false)]
        [switch]
        $ProxyUseDefaultCredentials,
        [Parameter(ParameterSetName = "create_new")]
        [string]
        $InstanceName = $null

    )
        
    DynamicParam {
        # ArrayList mit erlaubten Werten für das ValidateSet
        $validateList = get-APIRunningInstanceOAuth2
    
        # Dynamische Parameter-Definition
        $paramDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
    
        # Erstellen des Parameter-Attributes inklusive ValidateSet
        $attributes = New-Object System.Collections.ObjectModel.Collection[System.Attribute]
        $paramAttribute = New-Object System.Management.Automation.ParameterAttribute
        $paramAttribute.Mandatory = $true
        $paramAttribute.ParameterSetName = "select_one"
        $attributes.Add($paramAttribute)
    
        # ValidateSet aus den Werten der ArrayList erstellen
        $validateSet = New-Object System.Management.Automation.ValidateSetAttribute($validateList)
        $attributes.Add($validateSet)
        
        # Dynamischen Parameter definieren
        $dynamicParam = New-Object System.Management.Automation.RuntimeDefinedParameter(
            'SelectRunningInstance', # Name des Parameters
            [string], # Typ des Parameters
            $attributes      # Attribute des Parameters (ParameterAttribute + ValidateSet)
        )
    
        # Parameter zum Dictionary hinzufügen
        $paramDictionary.Add('SelectRunningInstance', $dynamicParam)
    
        return $paramDictionary
    }#End Dynamic Parameter
    
    begin {

        switch ($PSCmdlet.ParameterSetName) {
            "select_one" { $Instance = $($PSCmdlet.MyInvocation.BoundParameters['SelectRunningInstance']); break }
            "create_new" { $Instance = "PSAPIClient_${InstanceName}"; break }
            Default { $Instance = "PSAPIClient_DEFAULT" }
        }
        
        #set Instance Variable Name with PSAPI-Prefix
        Write-Host "$($Instance) created"

        # Check if exsits the Instance Session Variable
        try {
            Get-Variable -Scope global -name PSAPIClient_AvailablieInstanceOAUT2 -ErrorAction Stop
        }
        catch {
            $global:PSAPIClient_AvailablieInstanceOAUT2 = [System.Collections.ArrayList]::new()
        }
    }       
        

    
    process {

        if (!($global:PSAPIClient_AvailablieInstanceOAUT2.InstanceName -eq ${Instance})) {
            #Create Class Instance
            $APICLIENT = [APIClientOAuth2]::new()
            $APICLIENT.SessionInformation.APIClientInstanceName = $Instance
            $AddInstance = [pscustomobject]@{
                InstanceName   = ${Instance}
                InstanceObject = $APICLIENT
                
            }

            $global:PSAPIClient_AvailablieInstanceOAUT2.add($AddInstance) | Out-Null
        }
        
        $APICLIENT = get-APIInstanceObjectOAuth2 -instance $Instance

        # Set Proxy
        $APICLIENT.SetAPIoAuthProxy($Proxy, $ProxyUseDefaultCredentials)

        #Set Session Information
        $APICLIENT.SetAPIoAuth2Configuration($ClientID, $ClientSecret, $TokenEndpoint, $APIEndpoint)
        
    }
    
    end {
        
    }
}