sqlaficionado
sqlaficionado

Reputation: 33

Display Distribution Lists and Members for Intermedia HostPilot PowerShell

I am still learning my way around PowerShell and I'm trying to get some data out of Intermedia using their Intermedia HostPilot PowerShell tool.

First I start out by adding all the Distribution Group information to my $Groups array:

$Groups = Get-DistributionGroup

I am able to get the DisplayName and EmailAddress of those in Distribution Groups, however I can't tell which user is in which group:

for ($i=0; $i -lt $Groups.length; $i++) 
{ Get-DistributionGroupMember -Identity $Groups[$i].DistinguishedName |
Select DisplayName, EmailAddress }

I found the script below online (https://www.morgantechspace.com/2015/06/powershell-export-distribution-list-members-to-csv.html) which was helpful but I still don't see the members of the group in my csv file, just a list of the distribution groups:

$Groups = Get-DistributionGroup
$Groups | ForEach-Object {
$group = $_.GUID
$members = ''
Get-DistributionGroupMember $group | ForEach-Object {
        If($members) {
              $members=$members + ";" + $_.GUID
           } Else {
              $members=$_.GUID
           }
  }
New-Object -TypeName PSObject -Property @{
      GroupName = $group
      Members = $members
     }
} | Export-CSV "C:\\Distribution-Group-Members.csv" -NoTypeInformation -Encoding UTF8

Ideally I would like to have an additional column that displays the Distribution Group for each user. Something like this:

DistributionGroup   DisplayName    EmailAddress
accounting              Rob Smith         [email protected]
accounting              John Quincy      [email protected]

This is one variation I tried:

for ($i=0; $i -lt $Groups.length; $i++) 
{ Get-DistributionGroupMember -Identity $Groups[$i].DistinguishedName | 
Select DisplayName, EmailAddress, $Groups[$i].DisplayName }

This just gives me a heading with the name of the first distribution group, like this:

DisplayName   EmailAddress    Accounting

Any tips are welcome. Thanks!

Upvotes: 0

Views: 844

Answers (2)

ChrisWord
ChrisWord

Reputation: 1

The $Result object matches the desired format example you gave and is ready to be output to the console, piped to Out-GridView, or exported to CSV.

$DGroups = Get-DistributionGroup
$Result = @()
foreach ( $DGroup in $DGroups ) {
    $DGroup | Get-DistributionGroupMember | Select-Object DisplayName, EmailAddress | ForEach-Object {
        $Result += [PSCustomObject]@{
            DistributionGroup = $DGroup.DisplayName
            DisplayName = $_.DisplayName
            EmailAddress = $_.EmailAddress
        }
    }
}

Hope this helps.

Upvotes: 0

StefTheo
StefTheo

Reputation: 449

I really don't know what the Intemedia HostPilot powershell commands are but in plain powershell you could go with something like that :

$DGroups = Get-ADGroup -Filter {(GroupCategory -eq "Distribution")} | select Name
Foreach ($Group in $DGroups) 
{
write-host""
write-host "Members of the >>> "$Group.Name" <<< are:"
write-host "--------"
$Users = Get-ADGroupMember $Group.Name | Select samaccountname | sort Samaccountname
Foreach ($user in $users) 
    {

    Get-ADUser -Identity $user.samaccountname -Properties * | select Name, Samaccountname, mail, displayname

    }

}

I am posting it as an answer as the code in the comments is not displayed really well.

Upvotes: 0

Related Questions