Public/TenantConnection/Connect-CustomerGraph.ps1

function Connect-CustomerGraph {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [string]$CustomerTenantId,
        [Parameter()]
        [boolean]$AsApp = $false
    )
    # Get SAM tokens if not already available
    begin {
        if (!$SAMTokens) {
            $SAMTokens = Get-SAMTokens
        }  
    }
    
    # Generate a token for MS graph, and connect with it.
    process {
        # Try to re-use existing connections
        $graphContext = Get-MgContext -ErrorAction SilentlyContinue

        if($graphContext.TenantId -eq $CustomerTenantId -and $Global:GraphToken -and $Global:GraphToken.expirationDateTime -gt (Get-Date) -and (($Global:GraphToken.idtyp -eq 'app' -and $AsApp) -or ($Global:GraphToken.idtyp -eq 'user' -and !$AsApp))) {
            Write-Host "Re-using existing Graph connection..." -ForegroundColor DarkGray
            return
        }
        try {
                #Write-Host "Generating a new token for MS Graph: asApp:$($AsApp)" -ForegroundColor DarkGray
                $Global:GraphToken = New-CustomPartnerAccessToken -Scopes 'https://graph.microsoft.com/.default' -TenantId $CustomerTenantId -AsApp:$AsApp
        }
        catch {
            throw "Failed to generate a token for MS Graph: $_"
        }
        try {
            Connect-MgGraph -AccessToken ($Global:GraphToken.access_token | ConvertTo-SecureString -AsPlainText -Force) -NoWelcome
        }
        catch {
            throw "Failed to connect to MS Graph: $_"
        }
    }
}