I wrote a PowerShell script for an Exchange 2007/2010 migration that will forward email for a group of users to an external SMTP recipient, while also delivering mail to the user’s inbox. The script uses an input csv file which specifies the following: the users that need their email forwarded, the address to forward the mail to, and the name of the contact that will be created in the source domain.
##################################################### # Bulk Contact Creation and Mail Forward Script # # for Exchange 2007/2010 # # Ron Williams # # ron dot williams at mail dot com # # 3/20/13 # ##################################################### #INSTRUCTIONS: # 1. Update csv file with appropriate values, make sure to the keep header row. # SamAccountName is the SAMaccountName from the source domain of the user # whose mail should forward to ext recipient. # ForwardingAddress is the SMTP address to forward the mail to. # Will existing mailbox with this value as -ForwardingAddress # FirstName is the First Name value that will be created on the contact # LastName is the Last Name value that will be created on the contact # 2. Run from EMS in format "C:\pathname\BulkContactForward.ps1 C:\pathname\input.csv" # 3. Update $OU in variables section below to the OU where you want to creat the contacts. #CSV FILE FORMAT: # SamAccountName,ForwardingAddress,FirstName,Lastname # joeb,joe.blow@contoso.com,Joe,Blow # mikes,michael.smith@contoso.com,Mike,Smith #VARIABLES $OU="contoso.com/TestOU" # Loop through the object returned by Import-Csv with each element represented by $person foreach ($person in (Import-Csv .\input.csv)) { # Check the Mailbox for the person exists If ((Get-Mailbox $person.SamAccountName -ErrorAction SilentlyContinue)) { # Check the mail contact doesn't exist and if not add it, hide it from GAL If (!(Get-MailContact $person.SamAccountName -ErrorAction SilentlyContinue)) { New-MailContact -name $person.SamAccountName -Firstname ` $person.FirstName -Lastname $person.lastname ` -ExternalEmailAddress $person.ForwardingAddress -OrganizationalUnit $OU; Set-MailContact -identity $person.SamAccountName ` -HiddenFromAddressListsEnabled $true Set-Contact $person.SamAccountName -Notes ` "Created for Email Migration Coexistence" # Set the Forwarding Address on the Mailbox Set-Mailbox $person.SamAccountName -ForwardingAddress ` $person.ForwardingAddress -DeliverToMailboxAndForward $true } else {write-host "The contact for", $person.SamAccountName, "already ` exists. No furthur action on this contact will be performed."} } else {write-host "The mailbox for", $person.SamAccountName, "did not exist. ` No furthur action on this mailbox will be performed."} }