Private/Invoke-RKSolutionsWithConnection.ps1

# Private: Build connection params from parameter set and call Connect-ToMgGraph (used by Public report cmdlets)
function Invoke-RKSolutionsWithConnection {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string[]] $RequiredScopes,
        [Parameter(Mandatory = $false)]
        [string] $TenantId,
        [Parameter(Mandatory = $false)]
        [string] $ClientId,
        [Parameter(Mandatory = $false)]
        [SecureString] $ClientSecret,
        [Parameter(Mandatory = $false)]
        [string] $CertificateThumbprint,
        [Parameter(Mandatory = $false)]
        [switch] $Identity,
        [Parameter(Mandatory = $false)]
        [SecureString] $AccessToken,
        [Parameter(Mandatory = $false)]
        [switch] $DebugMode,
        [Parameter(Mandatory = $true)]
        [string] $ParameterSetName
    )
    $connectionParams = @{ RequiredScopes = $RequiredScopes }
    if ($ParameterSetName -eq 'ClientSecret') {
        $connectionParams.TenantId = $TenantId
        $connectionParams.ClientId = $ClientId
        $connectionParams.ClientSecret = $ClientSecret
    } elseif ($ParameterSetName -eq 'Certificate') {
        $connectionParams.TenantId = $TenantId
        $connectionParams.ClientId = $ClientId
        $connectionParams.CertificateThumbprint = $CertificateThumbprint
    } elseif ($ParameterSetName -eq 'Identity') {
        $connectionParams.Identity = $true
        if ($TenantId) { $connectionParams.TenantId = $TenantId }
    } elseif ($ParameterSetName -eq 'AccessToken') {
        $connectionParams.AccessToken = $AccessToken
        $connectionParams.TenantId = $TenantId
    } else {
        if ($TenantId) { $connectionParams.TenantId = $TenantId }
        if ($ClientId) { $connectionParams.ClientId = $ClientId }
    }
    if ($DebugMode) { $connectionParams.DebugMode = $true }
    return Connect-ToMgGraph @connectionParams
}