Private/Hash/Get-DistributionGroupMembersHash.ps1

function Get-DistributionGroupMembersHash {
    <#
    .SYNOPSIS
        Creates a hash table from data returned from Get-DistributionGroupMembership
 
    .DESCRIPTION
        Creates a hash table from data returned from Get-DistributionGroupMembership
 
    .PARAMETER Recurse
        Reveals nested group membership
 
    .EXAMPLE
        "group01@contoso.com" | Get-DistributionGroupMembersHash -Recurse -Verbose
     
    .EXAMPLE
        Get-DistributionGroup -resultsize unlimited | Get-DistributionGroupMembersHash -Recurse -Verbose
 
#>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True)]
        [string[]]$Identity,

        [Parameter()]
        [switch]$Recurse
    )
    begin {
        $GroupHash = @{}
    }    
    process {
        foreach ($CurIdentity in $Identity) {
            Write-Verbose "Looking up memberships for '$CurIdentity'."
            if ($Recurse) {
                $GroupHash[$CurIdentity] = $CurIdentity | Get-DistributionGroupMembers -Recurse
            }
            else {
                $GroupHash[$CurIdentity] = $CurIdentity | Get-DistributionGroupMembers
            }
        }
    }
    end {
        $GroupHash
    }
}