Собираем группы рассылок пользователя

Задача – выгрузить список пользователей сервера Exchange 2010 с логинами и группами рассылок в которых они состоят. На выходе должны получить что-то типа:

"User Name1", "UserLogon1", "DistrGroup1;DistrGroup2;DistrGroup3;"
"User Name2", "UserLogon2", "DistrGroup3;DistrGroup4;DistrGroup5;"
....

Первые 2 столбца получаются достаточно легко через

Get-Mailbox -Server ServerName -ResultSize unlimited | select DisplayName,
SamAccountName

Однако, в свойствах учётной записи на сервере Exchange отсутствует привязка к группам, в которых состоит учётная запись. Зато в AD у учётной записи пользователя доступно свойство MemberOf:

(Get-ADUser UserName -Properties MemberOf).MemberOf

Которое является массивом строковых переменных, в которых содержатся Distinguished Name групп, в которых пользователь состоит. Останется только эти группы отфильтровать, чтобы остались только группы рассылок. Для этого будем использовать параметр sAMAccountType, который для групп рассылок (SAM_NON_SECURITY_GROUP_OBJECT) будет равен 268435457. Для фильтрации групп получается такой небольшой скрипт:

$Groups = (Get-ADUser UserName -Properties MemberOf).MemberOf
$GroupsString = ""
foreach ($Group in $Groups){
   $GroupObject = [ADSI]"LDAP://$Group"
   if ($GroupObject.sAMAccountType -eq '268435457') {
      $GroupsString = $GroupsString + $GroupObject.name + "; "}}

Итоговый скрипт будет следующий:

Get-Mailbox -Server ServerName -ResultSize unlimited | select DisplayName,
SamAccountName, @{Name="Distribution Groups";expression={
$Groups = (Get-ADUser $_.SamAccountName -Properties MemberOf).MemberOf
$GroupsString = ""
   foreach ($Group in $Groups){
      $GroupObject = [ADSI]"LDAP://$Group"
      if ($GroupObject.sAMAccountType -eq '268435457') {
         $GroupsString = $GroupsString + $GroupObject.name + "; "}}
   $GroupsString}} | Export-Csv c:Tempusers.csv

4 thoughts on “Собираем группы рассылок пользователя

  1. Спасибо большое, в powershell’e еще юный падаван, давно искала под эту цель скрипт 🙂

  2. В этом скрипте только вместо ServerName нужно ввести имя почтового сервера и всё?

Leave a Reply

Your email address will not be published. Required fields are marked *