PowerShell. Выгрузка всех групп пользователя

Периодически бывает нужно выгрузить все группы пользователя и проследить их иерархию. Как раз с такой задачей я и столкнулся сегодня. В процессе ее решения я понял, что легче всего данную информацию получить с использованием PowerShell.
Сам скрипт спрятан под катом, правда расписывать его я не стану :)

#---------------------------
#-------- Variable ---------
#---------------------------
$ADUserMembers=""; $ADUser=""
$ADGroupName=""; $ADGroupCategory=""; $ADGroupScope=""
$i=0

#---------------------------
#------- Functions ---------
#---------------------------
function Get-ADGroupName ($DN)
{
$ADGrpName= (Get-ADGroup -Filter {DistinguishedName -eq $DN}).SamAccountName
return $ADGrpName
}

function Get-GroupMemberOf ($ADGroupName)
{$ii++; $a=0
$Message=""; $Prefix=""
$GroupCategory=""; $GroupScope=""; $GroupName=""

For ($a=0; $a -lt $ii; $a++) {$Prefix = $Prefix + " "}

$DNs=(Get-ADGroup $ADGroupName -Properties *).MemberOf
if ($DNs.count -ne 0)
{
foreach ($DN in $DNs)
{
# $Prefix =" $ADGroupName => "
$GroupName = (Get-ADGroupName $DN)
$GroupCategory = (Get-ADGroup $GroupName -Properties *).GroupCategory
$GroupScope = (Get-ADGroup $GroupName -Properties *).GroupScope

$Message="$Prefix $ADGroupName => $GroupName [$GroupCategory - $GroupScope]"
Write-Host $Message

Get-GroupMemberOf $GroupName ' '
}# End ForEach
}# End IF
}#End Function

#-----------------------------------------------------------------
#--> START: Group Statistic
Clear-Host

$ADUser= Read-Host "Please enter AD-User"

$ADUserMembers=(Get-ADUser $ADUser -Properties *).MemberOf

Write-Host "AD-User: $ADUser" -ForegroundColor blue
#PrimaryGroup
$ADPrimaryGroupDN = (Get-ADUser -Properties * -Filter {SamAccountName -eq $ADUser}).PrimaryGroup
$ADPrimaryGroupName=(Get-ADGroupName $ADPrimaryGroupDN)
$ADGroupCategory=(Get-ADGroup $ADPrimaryGroupName).GroupCategory
$ADGroupScope=(Get-ADGroup $ADPrimaryGroupName).GroupScope
$Message = "Primary Group: $ADPrimaryGroupName [$ADGroupCategory, $ADGroupScope]"
Write-Host $Message -BackgroundColor yellow

#Other groups
foreach ($ADUserMember in $ADUserMembers)
{$i++
$ADGroupName = (Get-ADGroupName $ADUserMember)
$ADGroupCategory=(Get-ADGroup $ADGroupName).GroupCategory
$ADGroupScope=(Get-ADGroup $ADGroupName).GroupScope
$Message = "($i) $ADGroupName [$ADGroupCategory, $ADGroupScope]"
Write-Host $Message -ForegroundColor black
Get-GroupMemberOf $ADGroupName ' '
Write-Host " "
}