Monday, May 3, 2010

Exchange 2010 Powershell Script - Email owners of all email distribution groups

Updated for exchange 2010. Enumerates all distribution groups, then emails the owner of each group a list of group members per distribution list.

# Enumerates a list of all members of all Distribution Lists
# in Exchange 2010.
# Script will then proceed to email each owner a list of all
# members of each group.
#
# Use PowerShell.exe -command
# ". 'D:\Program Files\Microsoft\Exchange Server\V14
#\bin\RemoteExchange.ps1';
# Connect-ExchangeServer -auto; path_to_your_script"
#
# Updated 5/02/10
# By: Gnawgnu

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

#first get all distributionlists
$dl = get-distributiongroup

#then enumerate through them all and get all group members.
foreach ($group in $dl) {

#build group data
$groupName = "Group Name: " + $group.name
$groupAddr = "Email Address: " + $group.PrimarySMTPAddress
write-host $groupName -foregroundcolor Green
$dlgm = get-distributionGroupMember $group.name.ToString()

# grab the first owner from the multivalued property
$gOwner = get-user -Identity $group.ManagedBy[0]

#setup email - make sure to add to your whitelist for
#antispam if applicable.
$sender = "PickASMTPSenderEmailAddress"
write-host $sender
#get Email Address of group owner
$recipient = $gOwner.WindowsEmailAddress
write-host $recipient
$server = "YourSMTPServerGoesHere"
write-host $server
$subject = "Monthly Review required - Email Group: " + $group.Name.ToString()
write-host $subject
#Note: `r`n is a carriage return
$bText1 = "`r`nOwner:" + $gOwner.Name + "`r`n"
$bText2 = $groupAddr.ToString() + "`r`n"
$bText3 = "group members: `r`n"
$bText4 = $dlgm | fl Name | out-String
$bText5 = "Please use your Outlook Client to make changes if needed.`r`n"
$bText6 = "If you are no longer the manager of this group, blah.`r`n"

$body = $bText1 + $bText2 + $bText3 +$bText4 +$bText5 +$bText6
write-host $body.ToString()
$msg = new-object System.Net.Mail.MailMessage $sender, `
$recipient, $subject, $body

#send email
$client = new-object System.Net.Mail.SmtpClient $server
$client.credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$client.Send($msg)

}

Old post:
http://gnawgnu.blogspot.com/2008/03/exchange-2007-powershell-script-emails.html

3 comments:

Chad said...

Great script.

I was wondering if you may know of a script that mails a copy of an email to 1 of several people on a list. So, email1 comes in and goes to recipienta, email2 to recipientb, etc. I'm looking for a way to distribute information requests to one of several customer service representatives.

Thanks,

Chad

Gnawgnu said...

I'm not aware of any way to do round robin like that with just what's built into exchange server 2010. If you bolt on Office Communications server 2007 R2 it has that ability built in (http://technet.microsoft.com/en-us/library/dd425187%28office.13%29.aspx). Otherwise you'd have to find a 3rd party product.

Anonymous said...

Are there any powershell scripts that can search distribution lists that contain , for example, a particular email address?