vCenter Server ships out of the box a number of system and custom roles, which can be used or users can create their own custom roles containing the required privileges. If you wanted to understand which roles are actively being used, the following PowerCLI snippet can help provide insights to roles that have been assigned. Furthermore, the script will also output to a file, that contains all he privileges defined for the vCenter Roles that are in active use.
$roles = Get-VIRole $permissions = Get-VIPermission $results = @{} foreach ($permission in $permissions) { $role = $permission.Role if($results.ContainsKey($role)) { $results[$role]+=1 } else { $results[$role]=1 } } Write-Host "`nTotal Roles: $($roles.count)" Write-Host "Total Roles Used: $($results.count)" Write-Host "Role Usage:" $results.GetEnumerator() | Sort-Object -Property Value -Descending $outfile = "used-roles.txt" foreach ($key in $results.keys) { $role = Get-VIRole $key if(!$role.IsSystem) { $key | Out-File -Append -LiteralPath $outfile "=========================================================" | Out-File -Append -FilePath $outfile $role.ExtensionData.Privilege | Out-File -Append -LiteralPath $outfile "" | Out-File -Append -LiteralPath $outfile } }
Here is an example output of running the script:
Here is an example output from used-roles.txt file that is generated, which contains the list of privileges for each role that is in use:
William,
Since you are talking about vCenter permissions again, as far as I know your 2017 post on the subject is still the only way I have found to add/remove Global Permissions with something approaching PowerCLI
But I notice that the vCenter GUI when displaying the object-level permissions will show that a permission is 'defined in' Global Permission (if it is), but I can't figure out how to pull that information out of Get-VIPermission. Is it available there? Or is there a way to modify your GlobalPermissions.ps1 code from 2017 to do something like a Get-GlobalPermission instead of just New- and Remove-
Or I am missing something obvious?
The APIs for vSphere Global Permissions are currently priviate, hence the need to rely on vSphere MOB hack to access its functions. See https://williamlam.com/2025/04/quick-tip-listing-vsphere-global-permissions-using-powershell.html for your answer 🙂