This script will list all members (recursively) of an Exchange Distribution Group.
function Get-DistributionGroupMemberRecursive
{
<#
.SYNOPSIS
This script will list all the members (recursively) of a DistributionGroup
.EXAMPLE
Get-DistributionGroupMemberRecursive -Group TestDG -Verbose
.NOTES
Francois-Xavier Cat
www.lazywinadmin.com
@lazywinadm
#>
[CmdletBinding()]
PARAM ($Group)
BEGIN
{
TRY
{
# Retrieve Group information
Write-Verbose -Message "[BEGIN] Retrieving members of $Group"
$GroupMembers = Get-DistributionGroupMember -Identity $Group -ErrorAction Stop -ErrorVariable ErrorBeginGetDistribMembers |
Select-object -Property Name, PrimarySMTPAddress, @{ Label = "Group"; Expression = { $Group } }, RecipientType
}
CATCH
{
Write-Warning -Message "[BEGIN] Something wrong happened"
if ($ErrorBeginGetDistribMembers) { Write-Warning -Message "[BEGIN] Issue while retrieving members of $Group" }
Write-Warning -Message $Error[0].Exception.Message
}
}
PROCESS
{
FOREACH ($Member in $GroupMembers)
{
TRY
{
Write-verbose "[PROCESS] Member: $($member.name)"
SWITCH ($Member.RecipientType)
{
"MailUniversalDistributionGroup" {
# Member's type is Distribution Group, we need to find members of this object
Get-DistributionGroupMemberRecursive -Group $($Member.name) |
Select-Object -Property Name, PrimarySMTPAddress, @{ Label = "Group"; Expression = { $($Member.name) } }, RecipientType
Write-Verbose -Message "[PROCESS] $($Member.name)"
}
"UserMailbox" {
# Member's type is User, let's just output the data
$Member | Select-object -Property Name, PrimarySMTPAddress, @{ Label = "Group"; Expression = { $Group } }
}
}
}
CATCH
{
Write-Warning -Message "[PROCESS] Something wrong happened"
Write-Warning -Message $Error[0].Exception.Message
}
}
}
END
{
Write-Verbose -message "[END] Done"
}
}