Private/Get-IntuneAccessRoleDefinitions.ps1

function Get-IntuneAccessRoleDefinitions {
    [CmdletBinding()]
    [OutputType([object[]])]
    param()

    $null = Assert-IntuneAccessConnection -RequiredScope 'DeviceManagementRBAC.Read.All'
    $definitions = @(Invoke-IntuneAccessGraphRequest -Uri 'deviceManagement/roleDefinitions')

    return @($definitions | ForEach-Object {
        $missingValue = [object]::new()
        $permissionValue = Get-IntuneAccessProperty $_ 'rolePermissions' $missingValue
        $isBuiltInValue = Get-IntuneAccessProperty $_ 'isBuiltIn' $missingValue
        [PSCustomObject] @{
            PSTypeName      = 'IntuneAccess.RoleDefinition'
            Id              = [string] (Get-IntuneAccessProperty $_ 'id')
            DisplayName     = [string] (Get-IntuneAccessProperty $_ 'displayName')
            Description     = [string] (Get-IntuneAccessProperty $_ 'description')
            IsBuiltIn       = if ([object]::ReferenceEquals($isBuiltInValue, $missingValue)) { $null } else { [bool] $isBuiltInValue }
            RolePermissions = if ([object]::ReferenceEquals($permissionValue, $missingValue)) { @() } else { @($permissionValue) }
            PermissionDataState = if ([object]::ReferenceEquals($permissionValue, $missingValue)) { 'Missing' } else { 'Available' }
            SourceApiVersion = 'v1.0'
        }
    })
}