Some tasks are better completed using PowerShell, such as creating a report of all Distribution Groups in Microsoft 365 including the group members. Unfortunately, there is no ‘built-in’ method from the Microsoft 365 or Exchange Online Admin Center that allows you to do this.
In this tutorial, I am going to show you how you can use my script to create a report on all Distribution groups and members using the Exchange Online PowerShell module. The report will look like the below, with a line for each member, with the member type, group display name and group address. If a user appears in more than one group, a new line will represent these membership in each group.
Pre-requisites
The script in this tutorial uses the Exchange Online PowerShell module. This module contain the necessary commands to connect to Exchange Online and produce the required information.
To install the Exchange Online PowerShell module, I have written a separate tutorial which you can access here: How To Connect to Exchange Online with PowerShell.
The script to create a distribution group and member report
Below is the full script, I recommend you copy and paste this into a text editor first, or PowerShell ISE before running. You will find the result in the C:\temp folder on your drive.
<# Version: 1.0
Author: Daniel Bradley (https://www.linkedin.com/in/danielbradley2/)
Website: https://ourcloudnetwork.com/
#>
#Connect to Exchange Online
Connect-ExchangeOnline
#Create report array object
$Report = [System.Collections.Generic.List[Object]]::new()
#Get all groups
$GroupList = Get-DistributionGroup
#Generate report
Foreach ($group in $grouplist) {
$groupmembers = $null
$groupmembers = Get-DistributionGroupMember -Identity $group.Name
Foreach ($member in $groupmembers) {
$obj = [PSCustomObject][Ordered]@{
"Member" = $member.PrimarySmtpAddress
"Member Type" = $Member.RecipientType
"Group" = $Group.DisplayName
"Group Address" = $Group.PrimarySmtpAddress
}
$Report.Add($obj)
}
}
#Export report
$Report | Export-CSV -path "C:\temp\distribution-group-report.csv" -NoTypeInformation
The results
The report will be produced in CSV format and will be best opened directly in Microsoft Excel. It will look like the following: