Dumping the RBAC Hierarchy

One of the things I noticed between RTM and SP1 for Exchange 2010 is the changes made to the RBAC environment, specifically the introduction of many new parameters on individual role entries (cmdlets associated with a role).  Using the shell to manage this can be difficult, which is why I posted a link back in May 2010 to a spreadsheet I created that depicted the RBAC components in a pivot table. 

Rather than giving out fish, it's time to share the code.  You'll likely want a mechanism for not only evaluating the changes between versions, but also a way to determine what exactly has been delegated in your own environments.  Here's the code I used to build that raw data.  Take the CSV formatted data, bring it into Excel and use it for your own pivot table.

$DC = "[Domain Controller Name]"

Foreach ($RG in Get-RoleGroup -DomainController $DC){

# write-output $RG.Name

Foreach ($AR in (Get-RoleGroup "$RG" -DomainController $DC).Roles){

# write-output $AR.Name

Foreach ($RE in Get-ManagementRoleEntry "$AR\*" -DomainController $DC){

$cmdlet = $RE.Name
foreach ($P in (Get-ManagementRoleEntry "$AR\$cmdlet" -DomainController $DC).Parameters) {

write-output $RG','$RE','$cmdlet','$P
$Count+=1

}

}

}

}

write-host "Total Processed: $Count"