Scripts/Get-AzCachedAccessToken.ps1

param(
   [switch][parameter()] $AssignGlobalVariables = $false
)

function Get-AzCachedAccessToken()
{
    if (-not (Get-Module Az.Accounts)) {
        Import-Module Az.Accounts
    }

    $azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
    if (-not $azProfile.Accounts.Count) {
        Write-Error "Ensure you have logged in (Connect-AzAccount) before calling this function."
    }

    $currentAzureContext = Get-AzContext

    $profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)
    
    Write-Verbose ("Tenant: {0}" -f  $currentAzureContext.Subscription.Name)
    
    $token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
    
    if($AssignGlobalVariables) {
        $Global:subscriptionId = $currentAzureContext.Subscription.Id
        Write-Host "Global variable 'subscriptionId' assigned."

        $Global:accessToken = $token.AccessToken
        Write-Host "Global variable 'accessToken' assigned."
    }

    Write-Host "AccessToken and subscriptionId retrieved"

    return new-object psobject -Property @{ SubscriptionId = $currentAzureContext.Subscription.Id; AccessToken = $token.AccessToken }
}

Get-AzCachedAccessToken