Scripts/Get-AzCachedAccessToken.ps1

param(
    [Parameter(Mandatory = $false)][switch] $AssignGlobalVariables = $false
)

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

$currentAzureContext = Get-AzContext

$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)

$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 "Azure access token and subscription ID retrieved from current active Azure authenticated session" -ForegroundColor Green
return New-Object psobject -Property @{ SubscriptionId = $currentAzureContext.Subscription.Id; AccessToken = $token.AccessToken }