function Get-NestedGroupMembership { if ($args.count -eq 0) { break } if (test-path variable:GROUPS) { remove-variable GROUPS } $GROUPS=new-object system.collections.generic.list[string] function Get-NestedGroupMembership_Worker { if ($args.count -eq 0) { break } $P=$args[0].tostring() if ((get-adobject -filter { name -eq $P }).objectclass -eq "user") { try { get-adprincipalgroupmembership $P | % { get-nestedgroupmembership_worker $_.name } } catch { [void]'foo' } } elseif ((get-adobject -filter { name -eq $P }).objectclass -eq "group") { if (-not ($GROUPS.contains($P))) { $GROUPS.add($P) try { get-adprincipalgroupmembership $P | % { get-nestedgroupmembership_worker $_.name } } catch { [void]'foo' } } } } $P=$args[0].tostring() get-nestedgroupmembership_worker $P write-output $GROUPS | sort-object # remove-variable GROUPS }