Applies to Exchange 2016, Online, 2013, 2010 and 2007.
Viewing current dynamic distribution group membership on Exchange Server is very easy thanks to the Get-Recipient PowerShell cmdlet and its -RecipientPreviewFilter parameter.
To display members of a single dynamic distribution group simply run:
Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup <name of group>).RecipientFilter -OrganizationalUnit $group.RecipientContainer
You can also easily export members of any distribution group to a CSV file by running:
Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup <name of group>).RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select Displayname | Export-Csv "<path of target CSV file>"
Displaying members of all dynamic distribution groups is not much harder. The trick is to display them in an orderly way instead of lumping them all together. A good way of achieving this is by using a formated table for each group with the group’s name as the header. Here is how to do this:
foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | ft @{Expression={$_.displayname};Label=($group).name}}
The results of the command above can be exported to a file, but since they are already formated, it cannot be a CSV file.
foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | ft @{Expression={$_.displayname};Label=($group).name} | Out-File "c:\<path>.txt" -Append}
Another option is to generate a list of dynamic group memebers with their group membership provided in a separate column:
foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select DisplayName,@{n="Group";e={$group.name}}}
This time we can export the result of the script to a comma separated file:
foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select DisplayName,@{n="Group";e={$group.name}} | Export-Csv "<target CSV filepath>" -Append}
To export members of separate dynamic distribution groups to separate CSV files use a variation of the below script:
foreach ($group in (Get-DynamicDistributionGroup)) {Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -OrganizationalUnit $group.RecipientContainer | Select DisplayName | Export-Csv "c:\$group.members.csv"}
Further reading
How to split CSV file into multiple files using PowerShell
Central management of email signatures on Exchange and Office 365
any hints how do I sort the members per group in alphabetical order?
Try pipelining the group results to
| Sort DisplayName
before closing the curly bracketAntonio Segovia – thank you so much for your post with the correction on needing the -OrganizationalUnit. I was trying to get the result of a DDL and it was coming out totaly wrong and thought my filter was jacked. Nope just needed that additional switch and got exactly what ! should have.
$FTE = Get-DynamicDistributionGroup “hq”
Get-Recipient -ResultSize Unlimited -RecipientPreviewFilter $FTE.RecipientFilter -OrganizationalUnit $FTE.RecipientContainer | Format-Table Name,Primary*
For those who arrive to this page trying to obtain the membership of a Dynamic DG. Please note that you MUST specify the -OrganizationalUnit with the RecipientContainer.
So instead of:
Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup ).RecipientFilter
Use this:
Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup ).RecipientFilter -OrganizationalUnit (get-dynamicdistributiongroup ).RecipientContainer
Failing to do this will result on getting the wrong membership.
Thanks for the comment, you’re right!
I don’t know how I missed this part from the first examples, it’s updated now.
Nice post!!
May i know how do i import the DDL list from CSV file and get the member list?
thank you!!
Thanks for the comment, I’m glad you found the article useful.
To get the list from a CSV file, use the following cmdlet:
$DDL = import-csv "<target CSV file path>" ; $DDL