Private/Auth/Get-HydrationGraphAccessIssue.ps1

function Get-HydrationGraphAccessIssue {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.ErrorRecord]$ErrorRecord,

        [Parameter(Mandatory)]
        [string]$Workload,

        [Parameter(Mandatory)]
        [string]$Endpoint,

        [Parameter(Mandatory)]
        [string]$RequiredScope,

        [string]$RoleHint = 'Use a Global Administrator account with active Intune service access.'
    )

    $statusCode = Get-GraphStatusCode -ErrorRecord $ErrorRecord
    $rawMessage = if ($ErrorRecord.ErrorDetails -and $ErrorRecord.ErrorDetails.Message) {
        $ErrorRecord.ErrorDetails.Message
    } else {
        $ErrorRecord.Exception.Message
    }

    if (-not $statusCode) {
        if ($rawMessage -match '\b401\b|Unauthorized') {
            $statusCode = 401
        } elseif ($rawMessage -match '\b403\b|Forbidden|Access denied') {
            $statusCode = 403
        }
    }

    $statusText = if ($statusCode) { "HTTP $statusCode" } else { 'Graph access error' }

    return "$Workload access check failed: $statusText from $Endpoint. Required scope $RequiredScope is present; verify Intune service authorization/RBAC. $RoleHint"
}