Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@lukejjh
Created June 23, 2021 02:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukejjh/b75548ec1449d675b68c33622f602c9a to your computer and use it in GitHub Desktop.
Save lukejjh/b75548ec1449d675b68c33622f602c9a to your computer and use it in GitHub Desktop.
Function providing missing -Recurse parameter for Get-DistributionGroup.
function Get-DistributionGroupRecursive {
<#
.SYNOPSIS
Function providing missing -Recurse parameter for Get-DistributionGroup.
.DESCRIPTION
Takes an identity string and returns the matching distribution group and any nested groups beneath it.
Only distribution groups are returned, not mailboxes, etc.
.EXAMPLE
Get-DistributionGroupRecursive "My Distribution Group"
.EXAMPLE
Get-DistributionGroupRecursive "mydistributiongroup@example.org"
#>
Param (
[Parameter(Mandatory=$true, Position=0)][string[]]$Identity,
[Parameter(Mandatory=$false, DontShow)][string[]]$LastResults,
[Parameter(Mandatory=$false, DontShow)][switch]$ChildSearch = $false
)
$Condition = { $_.RecipientType -eq "MailUniversalDistributionGroup" -and $LastResults -notcontains $_ }
$Identity | ForEach-Object {
if ($ChildSearch) {
$Results = Get-DistributionGroupMember -Identity $_ -ResultSize Unlimited | Where-Object $Condition | Get-DistributionGroup
} else {
$Results = Get-DistributionGroup -Identity $_ -ResultSize Unlimited | Where-Object $Condition
}
if (($Results | Measure-Object).Count -gt 0) {
$Results
Get-DistributionGroupRecursive -Identity $Results.Name -LastResults ($LastResults + $Results.Name) -ChildSearch
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment