Как указано в комментариях, вы можете использовать командлет Get-Aduser
после заполнения результатов. Здесь вам нужно отфильтровать группы, иначе командлет выдаст исключения для каждой группы.
$results = @()
foreach ($group in $grouplist) {
$description = (Get-ADGroup $group -Properties description).description
$members = Get-ADGroupMember $group | ?{$_.objectClass -eq "user"} | % {Get-ADUser $_ -Properties enabled}
$results += $members | ? {$_.Enabled -eq $true } | select samaccountname, name, @{name='groupname';expression={$group}}, @{name='description';expression={$description}}
}
В качестве альтернативы вы можете использовать LDAP-фильтры. Этот параметр заметно быстрее, поскольку вы делаете только один запрос на группу, а не один на пользователя.
$results = @()
foreach ($group in $grouplist) {
$group = Get-ADGroup $group -Properties description
$members = Get-ADUser -LDAPFilter "(&(memberof=$($group.DistinguishedName))(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))"
$results += $members | select samaccountname, name, @{name='groupname';expression={$group}}, @{name='description';expression={$group.description}}
}
С помощью LDAP-фильтров вы также можете запрашивать членов нескольких групп одновременно, но так как вам нужен контекст в в какой группе был найден пользователь, здесь не вариант ..