I made some changes.
function Get-AllSubGroups
{
param(
[string]$Name,
[string]$DName
)
if((Get-PSCallStack).Count -gt 12){
return
}
else{
if($Name){
$filter = {Name -eq $Name}
}
else{
$filter = {DistinguishedName -eq $DName}
}
$group = Get-ADGroup -Filter $filter -Properties Members
if($group -and $group.Members){
$group.Members | %{
Get-AllSubGroups -DName $_
}
if($DName){
return $group.Name
}
}
}
}
$date = Get-date -Format yyyy-MM-dd
$csvName=("C:\Temp\" + $date +"-" + $global:DefaultVIServer.Name + "-Permissions.csv")
$domain = $env:USERDOMAIN
$report = foreach($vc in $global:DefaultVIServers){
Write-Verbose "Looking at $vc.Name"
$si = Get-View ServiceInstance -Server $global:DefaultVIServer
$authMgr = Get-View -Id $si.Content.AuthorizationManager-Server $global:DefaultVIServer
foreach($perm in $authMgr.RetrieveAllPermissions()){
Write-Verbose "`tPrincipal: $($perm.Principal)"
$perm | Select @{N='Entity';E={Get-View -Id $_.Entity -Property Name -Server $global:DefaultVIServer | select -ExpandProperty Name}},
@{N='Entity Type';E={$_.Entity.Type}},
@{N='vCenter';E={$vc.Name}},
Principal,
@{N='Nested';E={$false}},
Propagate,
@{N='Role';E={$perm = $_; ($authMgr.RoleList | where{$_.RoleId -eq $perm.RoleId}).Info.Label}}
if($perm.Group -and $perm.Principal -match $domain){
Get-AllSubGroups -Name $perm.Principal.Split('\')[1] |
Select @{N='Entity';E={Get-View -Id $perm.Entity -Property Name -Server $global:DefaultVIServer | select -ExpandProperty Name}},
@{N='Entity Type';E={$perm.Entity.Type}},
@{N='vCenter';E={$vc.Name}},
@{N='Principal';E={"$($domain)\$($_)"}},
@{N='Nested';E={$true}},
@{N='Propagate';E={$perm.Propagate}},
@{N='Role';E={($authMgr.RoleList | where{$_.RoleId -eq $perm.RoleId}).Info.Label}}
}
}
}
$report | Export-Csv $csvName -NoTypeInformation -UseCulture