To list admin role assignments in Microsoft Entra ID, read the directory role assignments and put Global Administrator first. The standard list holds active assignments only; eligible ones need Privileged Identity Management and Microsoft Entra ID P2. A role held through a group lists the group, not its people.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of active assignments with role, holder and scope. |
| Admin centre | A one-off download, or a look at 1 role or 1 person. |
| Altivane | Recommended for recurring reviews, with groups expanded to people and the counts rated. |
Before you start
Use an account that can read role assignments: Global Reader or Privileged Role Administrator covers both PowerShell examples. They request RoleManagement. and RoleEligibilitySchedule., and your organisation may require administrator consent. Eligible assignments need Microsoft Entra ID P2.
The list shows active assignments, and a role held through a group lists the group. The scope shows how far an assignment reaches: / is the whole tenant. The examples read and export; they do not change any role.
Option 1
List admin role assignments with PowerShell
Install the modules once, then export every active assignment with its role, holder and scope. The script reads the role names first, then each assignment with its holder. Global Administrator sorts to the top.
# Install once, if the modules are not already installed.
$modules = 'Microsoft.Graph.Authentication', 'Microsoft.Graph.Identity.Governance'
Install-Module $modules -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-MgGraph -Scopes 'RoleManagement.Read.Directory' -NoWelcome
try {
$roles = @{}
Get-MgRoleManagementDirectoryRoleDefinition -All |
ForEach-Object { $roles[$_.Id] = $_.DisplayName }
$assignments = Get-MgRoleManagementDirectoryRoleAssignment -All -ExpandProperty principal
$report = @($assignments | ForEach-Object {
$who = $_.Principal.AdditionalProperties
[pscustomobject]@{
Role = $roles[$_.RoleDefinitionId]
Principal = $who['displayName']
UserPrincipalName = $who['userPrincipalName']
PrincipalType = $who['@odata.type'] -replace '^#microsoft\.graph\.', ''
DirectoryScopeId = $_.DirectoryScopeId
}
} | Sort-Object @{ Expression = { $_.Role -ne 'Global Administrator' } }, Role, Principal)
if ($report.Count -eq 0) {
Write-Output 'No active directory role assignments were found.'
} else {
$report | Export-Csv -Path './admin-role-assignments.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($report.Count) active role assignments exported."
}
} finally {
Disconnect-MgGraph | Out-Null
}PrincipalType says whether the holder is a user, a group or a service principal. To look at 1 holder, add -Filter "principalId eq 'object-id'" to the Get-MgRoleManagementDirectoryRoleAssignment line.
Add eligible assignments
These have their own cmdlet and permission. Run this on its own.
$ErrorActionPreference = 'Stop'
$scopes = 'RoleEligibilitySchedule.Read.Directory', 'RoleManagement.Read.Directory'
Connect-MgGraph -Scopes $scopes -NoWelcome
try {
$roles = @{}
Get-MgRoleManagementDirectoryRoleDefinition -All |
ForEach-Object { $roles[$_.Id] = $_.DisplayName }
$schedules = Get-MgRoleManagementDirectoryRoleEligibilitySchedule -All `
-ExpandProperty principal
$report = @($schedules | ForEach-Object {
$who = $_.Principal.AdditionalProperties
[pscustomobject]@{
Role = $roles[$_.RoleDefinitionId]
Principal = $who['displayName']
UserPrincipalName = $who['userPrincipalName']
MemberType = $_.MemberType
DirectoryScopeId = $_.DirectoryScopeId
}
} | Sort-Object Role, Principal)
if ($report.Count -eq 0) {
Write-Output 'No eligible role assignments were found.'
} else {
$report | Export-Csv -Path './eligible-assignments.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($report.Count) eligible role assignments exported."
}
} finally {
Disconnect-MgGraph | Out-Null
}MemberType says whether the eligibility is Direct, held through a Group or Inherited.
Option 2
List admin role assignments in the admin centre
- Sign in to the Microsoft Entra admin centre for the correct tenant.
- Go to Entra ID > Roles & admins.
- To download everything, select All roles, then Download assignments, enter a file name and select Start bulk operation. The CSV lists active assignments at all scopes.
- To look at 1 role, select its name, then Assignments. The Scope column shows Directory for tenant-wide assignments.
- To look at 1 person, go to Entra ID > Users, select the name, then Assigned roles. It shows whether each role is held directly or through a group.
This suits a one-off download or a look at 1 role or person. The download is a bulk operation that runs for up to 1 hour, has limits in large tenants and lists a group, not its members. For a repeatable list with eligible assignments, use PowerShell or Altivane.
Option 3 ยท Recommended for recurring reviews
List admin role assignments with Altivane
- Open Altivane and choose the tenant.
- Build the tenant's documents with the Directory Roles and PIM scorecard report in full, so people are listed as well as counted; builds start it on Summary.
- Open the tenant's Excel workbook and find Permanent Global Administrators for people who hold that role permanently, directly or through a group.
- Read Privileged People for everyone who holds or can activate a role, including Enabled, Synced, MFA Registered, Last Sign-In, Permanent Roles, Active PIM Roles and Eligible Roles. Directory Role Assignments shows each assignment as Entra holds it; Role Assignments Expanded to People has 1 row per person per role.
Altivane reads eligible assignments as well as active ones, where Privileged Identity Management can be read, and expands groups that hold roles into their people. The scorecard rates Permanent Global Administrators (Warning at 3, Critical at 5 by default), Privileged People (20 and 50) and Service Principals With Directory Roles (5 and 10); you can change these figures. The report needs a tenant that signs in with a certificate. MFA Registered needs Microsoft Entra ID P1 or P2; where it cannot be read, the column is blank and the report says why.
Contact usCommon questions
Why does the list show a group instead of people?
A role-assignable group can hold a role, so the group is the holder and the people are its members. A person's Assigned roles page shows whether a role is direct or through a group, and Altivane's Privileged People table lists people once groups are expanded.
Why are some assignments missing?
The standard list holds active assignments. Eligible ones need Microsoft Entra ID P2: use the eligible example, or open a role in the admin centre.
Do my administrators have MFA?
A role list does not say. Altivane's Privileged People table has an MFA Registered column; for the whole tenant, see how to find users without MFA, which puts administrators first.
Microsoft references
Technical references checked on 5 October 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.