functions/azure/Test-AzContextAndConnect.ps1

function Test-AzContextAndConnect {
    param (
        [string]$TenantId,
        [string]$SubscriptionId,
        [string]$ServicePrincipalName
    )

    $ctx = Get-AzContext
    $expectedCreds = Get-AzStoredServicePrincipalCredential `
        -TenantId $TenantId `
        -SubscriptionId $SubscriptionId `
        -ServicePrincipalName $ServicePrincipalName

    $expectedAppId = $expectedCreds.Credential.UserName

    $needsReconnect = -not $ctx -or
        $ctx.Tenant.Id -ne $TenantId -or
        $ctx.Subscription.Id -ne $SubscriptionId -or
        $ctx.Account.Id -ne $expectedAppId

    if ($needsReconnect) {
        Connect-AzAccount `
            -ServicePrincipal `
            -Credential $expectedCreds.Credential `
            -Tenant $expectedCreds.TenantId `
            -Subscription $expectedCreds.SubscriptionId | Out-Null
    }
}