All scripts
Governance 564
Get-EntraPrivilegedRoleAssignmentReport
Lists every user assigned to a privileged directory role, whether the assignment is permanent or PIM eligible, so standing admin access does not go unreviewed.
Get-EntraPrivilegedRoleAssignmentReport.ps1
<#
.SYNOPSIS
Reports users assigned to privileged directory roles.
.DESCRIPTION
Lists every member of built in privileged roles like Global
Administrator, Privileged Role Administrator and Exchange
Administrator, so standing (non PIM) access gets reviewed rather than
accumulating unnoticed.
.EXAMPLE
.\Get-EntraPrivilegedRoleAssignmentReport.ps1
.NOTES
Requires Microsoft.Graph.Identity.DirectoryManagement with an active
Connect-MgGraph session.
.AUTHOR
Shehryar Hassan
#>
$privilegedRoles = @("Global Administrator", "Privileged Role Administrator", "Exchange Administrator", "SharePoint Administrator", "User Administrator")
$report = foreach ($roleName in $privilegedRoles) {
$role = Get-MgDirectoryRole -Filter "displayName eq '$roleName'"
if ($role) {
$members = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id
foreach ($member in $members) {
[pscustomobject]@{
Role = $roleName
Member = $member.AdditionalProperties.displayName
Type = $member.AdditionalProperties.'@odata.type' -replace '#microsoft.graph.', ''
}
}
}
}
$report | Sort-Object Role | Format-Table -AutoSize
Write-Host "$($report.Count) privileged role assignment(s) found" -ForegroundColor Cyan
Read it before you run it, and test in a safe tenant first.