header1   header
header
header Register : : Login header
header
connector   connector
menuleft menuright
submenu   submenu
left
Exchange 2007 get-distributiongroupmember recursivly
Last Post 01 May 2008 06:53 AM by Karl Mitschke. 2 Replies.
Printer Friendly
  •  
  •  
  •  
  •  
  •  
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages
Karl MitschkeUser is Offline
Basic Member
Basic Member
Posts:451
Avatar

--
07 Mar 2008 01:38 PM

    Exchange 2007 doesn't have a builtin way to recurse distribution groups, soi I created this:

    #####################################

    # #

    # Script to retreive group members #

    # #

    # Karl Mitschke March 7 2008 #

    # #

    #####################################

    ######################################

    # heavily modified from recipe 7.3 #

    # in 'Active Directory Cookbook' #

    # by Robbie Allen #

    ######################################

    #requires -pssnapin Microsoft.Exchange.Management.PowerShell.Admin

    param

    ($group)

    $UnknownGroup

    = @{}

    function

    {

     

     

     

    {

     

    DisplayMembers($group)$SubGroup = @{}$AllMembers = @()if(!$group)$group = Read-Host "Enter the groups display name"

    }

     

    {

     

    }

     

    {

     

    if ($group.Contains("'"))$group = $group.Replace("'",'"')if ($group -eq "/?")Write-Host "Usage:"

     

    Write-Host ""

     

    Write-Host "get-exgrouprecurse -group "

     

    Write-Host ""

     

    Write-Host "or get-exgrouprecurse "

     

    Write-Host "Returns an object containing the group member, and the group name."

     

    break

    }

     

     

    $validate = Get-Group $group

     

    {

     

    if ($validate.RecipientTypeDetails.ToString() -match "mail")$searchGroup = Get-DistributionGroupMember $group

     

    {

     

    {

     

     

    {

     

     

    {

     

    if ($searchGroup)foreach ($member in $searchGroup)$membertype = $member.RecipientTypeDetailsif($membertype -match "Group")$samname = $member.SamAccountName.ToString()if ($SubGroup.ContainsKey($samname) -eq $true)Write-Output "^ already seen group member (stopping to avoid loop)"

    }

     

    else

    {

     

    }

    }

     

    $SubGroup.Add($samname,$member.DisplayName.ToString())else

    {

     

    {

     

    if($member.PrimarySmtpAddress -and $member.RecipientTypeDetails -notcontains "group")$obj = new-object psObject

     

    $obj | Add-Member -membertype noteproperty -name GroupMember -Value $member

     

    $obj | Add-Member -MemberType noteproperty -Name GroupName -Value $group

     

    $AllMembers += $obj

    }

    }

    }

    }

     

    else

    {

     

    }

     

    {

     

    {

    DisplayMembers

    $UnknownGroup.add($group,1)if($SubGroup.Values.Count -gt 0)foreach ($subGroup in $SubGroup.values)$subGroup

    }

    }

     

    {

     

    {

     

    if ($UnknownGroup.Keys.Count -gt 0)foreach ($LostGroup in $UnknownGroup.keys)$obj = new-object psObject

     

    $obj | Add-Member -membertype noteproperty -name GroupMember -Value "Cannot enumerate group"

     

    $obj | Add-Member -MemberType noteproperty -Name GroupName -Value $LostGroup

     

    $AllMembers += $obj

    }

     

    }

    }

     

    $UnknownGroup.Clear()else

    {

     

    Write-Output "$group does not appear to be mail enabled."

    }

     

    $group

    Write-Output $AllMembers

    }

    DisplayMembers

     

     


    137424395371.ps1

    http://unlockpowershell.wordpress.com
    Co-Author, Windows PowerShell 2.0 Bible
    -join("6B61726C6D69747363686B65406D742E6E6574"-split"(?<=\G.{2})",19|%{[char][int]"0x$_"})
    Karl MitschkeUser is Offline
    Basic Member
    Basic Member
    Posts:451
    Avatar

    --
    07 Mar 2008 01:39 PM
    argh - well, the attatchment should work ;)


    http://unlockpowershell.wordpress.com
    Co-Author, Windows PowerShell 2.0 Bible
    -join("6B61726C6D69747363686B65406D742E6E6574"-split"(?<=\G.{2})",19|%{[char][int]"0x$_"})
    Karl MitschkeUser is Offline
    Basic Member
    Basic Member
    Posts:451
    Avatar

    --
    01 May 2008 06:53 AM
    ##################################### # # # Script to retreive group members # # # # Karl Mitschke March 7 2008 # # # ##################################### ###################################### # heavily modified from recipe 7.3 # # in 'Active Directory Cookbook' # # by Robbie Allen # ###################################### #requires -pssnapin Microsoft.Exchange.Management.PowerShell.Admin param($group) $UnknownGroup = @{} function DisplayMembers($group) { $SubGroup = @{} $AllMembers = @() if(!$group) { $group = Read-Host "Enter the groups display name" } if ($group.Contains("'")) { $group = $group.Replace("'",'"') } if ($group -eq "/?") { Write-Host "Usage:" Write-Host "" Write-Host "get-exgrouprecurse -group " Write-Host "" Write-Host "or get-exgrouprecurse " Write-Host "Returns an object containing the group member, and the group name." break } $validate = Get-Group $group if ($validate.RecipientTypeDetails.ToString() -match "mail") { $searchGroup = Get-DistributionGroupMember $group if ($searchGroup) { foreach ($member in $searchGroup) { $membertype = $member.RecipientTypeDetails if($membertype -match "Group") { $samname = $member.SamAccountName.ToString() if ($SubGroup.ContainsKey($samname) -eq $true) { Write-Output "^ already seen group member (stopping to avoid loop)" } else { $SubGroup.Add($samname,$member.DisplayName.ToString()) } } else { if($member.PrimarySmtpAddress -and $member.RecipientTypeDetails -notcontains "group") { $obj = new-object psObject $obj | Add-Member -membertype noteproperty -name GroupMember -Value $member $obj | Add-Member -MemberType noteproperty -Name GroupName -Value $group $AllMembers += $obj } } } } else { $UnknownGroup.add($group,1) } if($SubGroup.Values.Count -gt 0) { foreach ($subGroup in $SubGroup.values) { DisplayMembers $subGroup } } if ($UnknownGroup.Keys.Count -gt 0) { foreach ($LostGroup in $UnknownGroup.keys) { $obj = new-object psObject $obj | Add-Member -membertype noteproperty -name GroupMember -Value "Cannot enumerate group" $obj | Add-Member -MemberType noteproperty -Name GroupName -Value $LostGroup $AllMembers += $obj } $UnknownGroup.Clear() } } else { Write-Output "$group does not appear to be mail enabled." } Write-Output $AllMembers } DisplayMembers $group


    http://unlockpowershell.wordpress.com
    Co-Author, Windows PowerShell 2.0 Bible
    -join("6B61726C6D69747363686B65406D742E6E6574"-split"(?<=\G.{2})",19|%{[char][int]"0x$_"})
    You are not authorized to post a reply.


    Active Forums 4.3
    right
    footer   footer
    footer Sponsored by Quest Software • SAPIEN Technologies • Compellent • Microsoft Windows Server 2008 R2 footer
    footer   footer