Display members of dynamic distribution groups using PowerShell

Display members of dynamic distribution groups using PowerShell

Applies to Exchange Online, 2019, 2016, 2013, 2010 and 2007.

How to list members of a single dynamic distribution group

Viewing current dynamic distribution group (or dynamic distribution list a.k.a. DDL) membership in Exchange is very easy thanks to the Get-Recipient PowerShell cmdlet and its –RecipientPreviewFilter parameter. This applies to Exchange 2019, 2016, 2013, 2010 and 2007, as well as Exchange Online.

To display members of a single dynamic distribution group simply run:

Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup <name of group>).RecipientFilter -OrganizationalUnit $_.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 $_.RecipientContainer | Select Displayname | Export-Csv "<path of target CSV file>"

How to get members of multiple dynamic distribution groups

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 formatted 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

Tools for Exchange Server

Recommended articles

How to connect and remotely manage Microsoft 365 with PowerShell

How to connect and remotely manage Microsoft 365 with PowerShell

Microsoft 365 web interface was designed to make it easier to manage your tenant right down to its administrative bowels. On the one hand it really is quick and simple to navigate, on the other it definitely lacks some advanced configuration options so loved by sysadmins. Luckily there is the mighty PowerShell coming to the rescue! You should already know its potential, which can also be utilized in Microsoft 365. Find out how.
New-ComplianceSearch: how to use the newer version of Search-Mailbox

New-ComplianceSearch: how to use the newer version of Search-Mailbox

Microsoft retired the Search-Mailbox cmdlet – now what? Discover how to use New-ComplianceSearch, its key advantages and how to make the switch seamlessly.
How to start remote PowerShell session to Exchange or Microsoft 365

How to start remote PowerShell session to Exchange or Microsoft 365

One of many features of the PowerShell command line tool is its ability to connect with and manage the Exchange Server remotely. The procedure described below applies to the classic on-prem Exchange server and to the Microsoft 365/Exchange Online version.

Comments

  1. Hello unfortunally this commands do not work for me. I just get a list of all users our domain.
    Our AD is like: Domain -> Frontend -> Users -> Location1, Location2 … We have one DDG for each Location.
    Now i want to get all members of ddg.location1 so i tried this:

    Get-Recipient -RecipientPreviewFilter (get-dynamicdistributiongroup “DDGLocation1”).RecipientFilter -OrganizationalUnit $location1.RecipientContainer

    Like i already said i just get a list of all users. Is there a way to specify just the location1 OU?

    • avatar
      Adam the 32-bit Aardvark says:

      You might need to specify the location manually. You don’t specify the variable $location1 anywhere, so it won’t work this way. Try running the cmdlet below to see each DDG location:
      Get-DynamicDistributionGroup | FT name,RecipientContainer

  2. avatar
    Steven Foster says:

    Antonio 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.

  3. $FTE = Get-DynamicDistributionGroup “hq”

    Get-Recipient -ResultSize Unlimited -RecipientPreviewFilter $FTE.RecipientFilter -OrganizationalUnit $FTE.RecipientContainer | Format-Table Name,Primary*

  4. avatar
    Antonio Segovia says:

    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.

    • avatar
      Adam the 32-bit Aardvark says:

      Thanks for the comment, you’re right!
      I don’t know how I missed this part from the first examples, it’s updated now.

    • avatar
      Adam the 32-bit Aardvark says:

      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

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

CodeTwo sp. z o.o. sp. k. is a controller of your personal data.
See our Privacy Policy to learn more.