To export dynamic distribution groups in Exchange Online, read them with Get-DynamicDistributionGroup -ResultSize Unlimited and keep each group's RecipientFilter, the rule that decides its members. Exchange Online stores each group's member list and refreshes it every 24 hours, so a person who starts to match the filter can wait up to a day for the group's mail.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of every dynamic group with its filter, owners, outside senders and last refresh. |
| Admin centre | Reading 1 group's members and rules, and when each group was last refreshed. |
| Altivane | Recommended for regular group reviews, with groups open to outside senders and groups Exchange marks as not valid flagged. |
Before you start
Use an account in the Organization Management or Recipient Management role group, which Microsoft lists for distribution groups. Microsoft says members of View-Only Organization Management can view the configuration of those features. The example uses the ExchangeOnlineManagement module and asks for no Microsoft Graph permission.
Know how the member list works. Microsoft says that since late May 2026, a group whose rules match 5,000 members or fewer gets its member list straight away when it is created or its rules change. A larger group takes up to 2 hours, and keeps its old list while it waits. Every group's list is then refreshed at least once every 24 hours, so someone who stops matching the filter can keep receiving the group's mail until the next refresh. The examples read and export; they change no group or rule.
Option 1
Export dynamic distribution groups with PowerShell
Install the module once, then connect and export 1 row for each dynamic distribution group.
# Install once, if the module is not already installed.
Install-Module ExchangeOnlineManagement -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-ExchangeOnline
try {
$groups = @(Get-DynamicDistributionGroup -ResultSize Unlimited)
$report = @(foreach ($group in $groups) {
[pscustomobject]@{
Name = $group.DisplayName
Address = $group.PrimarySmtpAddress
RecipientFilter = $group.RecipientFilter
IncludedRecipients = "$($group.IncludedRecipients)"
Owners = ($group.ManagedBy -join '; ')
AcceptsExternalMail = -not $group.RequireSenderAuthenticationEnabled
HiddenFromAddressLists = $group.HiddenFromAddressListsEnabled
LastRefreshed = $group.CalculatedMembershipUpdateTime
}
})
if ($report.Count -eq 0) {
Write-Output 'The tenant has no dynamic distribution groups.'
} else {
$report | Sort-Object Name |
Export-Csv -Path './dynamic-distribution-groups.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($report.Count) dynamic distribution groups exported."
}
} finally {
Disconnect-ExchangeOnline -Confirm:$false
}The CSV has 1 row per group. RecipientFilter is the filter Exchange applies, IncludedRecipients is set for a group built from the standard recipient types, and LastRefreshed is when Exchange last calculated the member list. A group with AcceptsExternalMail true takes mail from anyone on the internet, which matters most for a group that reaches every mailbox.
Compare a group's stored members with its filter
Reconnect with Connect-ExchangeOnline, then count the stored members and the recipients who match the filter now. Check the address first: Microsoft warns that a $null or non-existent -Identity value returns every group.
# Run while connected to Exchange Online. Replace the example group.
$address = 'allstaff@example.com'
$group = Get-DynamicDistributionGroup -Identity $address
$stored = @(Get-DynamicDistributionGroupMember -Identity $address -ResultSize Unlimited)
$now = @(Get-Recipient -RecipientPreviewFilter $group.RecipientFilter -ResultSize Unlimited)
Write-Output "Stored members: $($stored.Count). Matching the filter now: $($now.Count)."A difference usually means the stored list has not caught up with a change yet.
Option 2
Review dynamic distribution groups in the admin centre
- Sign in to the Exchange admin centre for the correct tenant.
- Go to Recipients > Groups > Dynamic distribution list. The Last refreshed column shows when each group's member list was last calculated.
- Select a group, open the Members tab and select View all members to read the stored list. The same tab holds the group's membership rules.
- On the Settings tab, read Delivery management for whether people outside your organisation can send to the group.
- Close the group without saving, so nothing changes.
This suits looking at 1 group. Microsoft says previewing who matches a filter is only in PowerShell, and the rules of a group with a custom recipient filter can't be changed in the admin centre.
Option 3 ยท Recommended for regular group reviews
Run Altivane's Dynamic Distribution Groups report
- Open Altivane and choose the tenant.
- Run the Dynamic Distribution Groups report for Exchange Online.
- Open the Excel workbook and read the table of the same name: each group's Recipient Filter, Included Recipients, Owners, Accepts External Mail, Hidden From Address Lists, Moderated, Created and Last Changed.
- Run the Empty Groups report next for the groups, dynamic ones included, that have no members.
Altivane marks Warning on a group Exchange reports as not valid, and Review on a group that accepts mail from outside the organisation, since a dynamic group often reaches a large share of the mailboxes. Reason says which applies. The rows are sorted by name, ready to compare with the last review.
Contact usCommon questions
Why isn't a new starter getting the group's mail?
The member list is stored and refreshed every 24 hours, so a new mailbox that matches the filter joins at the next refresh. Read CalculatedMembershipUpdateTime or the Last refreshed column, and compare the stored members with the preview in the second block.
Why can't I edit the rules in the admin centre?
The group uses a custom recipient filter. Microsoft says those rules can be changed only in Exchange Online PowerShell; groups built from the standard recipient types and conditions can be changed in the admin centre.
How do I export the members of an ordinary distribution group?
Ordinary groups keep a fixed member list that Get-DistributionGroupMember reads. See how to export distribution group members in Exchange Online.
Microsoft references
Technical references checked on 7 November 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.