По мотивам темы в форуме, и просто чтобы не забыть
Скрипт получает Primary Group пользователя. В отличии от остальных групп, primary содержится не в атрибуте пользователя MemberOf, а в PrimaryGroupId. Более того, в отличии от MemberOf в котором указываются DN групп, в PrimaryGroupID указывается лишь номер группы. Узнать какая группа соответствует какому номеру можно из свойства группы PrimaryGroupToken. В итоге с использованием AD Cmdlets получается вот такая конструкция:
Function Get-PrimaryGroup ($User)
{
$groups = @{}
Get-QADGroup -IncludedProperties PrimaryGroupToken | foreach {$groups[$_.PrimaryGroupToken]=$_.name}
Get-QADUser $User -IncludedProperties PrimaryGroupId |
foreach {
$_ | Add-Member -Type "NoteProperty" -Name "PrimaryGroup" -Value ($groups[$_.primaryGroupId]) -PassThru
}
}
На выходе из функции будут объекты пользователей полученные с помощью Get-QADUser, но с добавленным свойством – PrimaryGroup:
[PS <40> C:\Root] Get-PrimaryGroup -User Иванов| Format-List name, prim*
Name : Иванов Иван
PrimaryGroup : Domain Users
PrimaryGroupId : 513
[PS <42> C:\Root] Get-PrimaryGroup -User Ив* | Format-Table name, logonname, prim*
Name LogonName PrimaryGroup PrimaryGroupId
---- --------- ------------ --------------
Иванов Иван Ivanov Domain Users 513
Иванищенко Фёдор Ivanichenko Domain Users 513
Разумеется при большом количестве групп имеет смысл не получать таблицу соответствий PrimaryGroupToken каждый раз, а закешировать её, или применять запрос LDAP для того чтобы отбор нужной группы выполнялся уже с помощью ресурсов Active Directory.