Задача – выгрузить список пользователей сервера 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
Спасибо большое, в powershell’e еще юный падаван, давно искала под эту цель скрипт 🙂
Не за что.
В этом скрипте только вместо ServerName нужно ввести имя почтового сервера и всё?
выводится инфа только вида Kosarev Dmitry,”D.Kosarev”,