Writing Powershell scripts that target Exchange 2007 and 2010

If you’re planning a migration to Exchange 2010 that won’t be completed overnight, you may want to be able to run Exchange Powershell scripts that execute both Exchange 2007 and 2010 cmdlets from the same script. There’s a few reasons for doing this, including:

  • If you use logic to determine where to place new user mailboxes, and some mailboxes will be on 2007 and some on 2010.
  • If you create new mailboxes on Exchange 2007 and then add the new mailbox to a Exchange 2010 distribution group (for example, if you use moderated distribution groups).
  • If you’re using Outlook Live (Live@EDU hosted Exchange 2010) and create MailUsers on-premise and Mailboxes in the hosted environment.
  • You are using the Transporter suite to migrate mail and need to create mailboxes on a temporary Exchange 2007 server, migrate mail, and then move mailboxes to Exchange 2010.

OK – so my examples are mostly about provisioning and these are real-life examples of where I’ve used this method, but I’m sure you can think of other examples where it might be useful to you. So – what do you need?

  • Exchange 2007 SP2 management tools on any OS that supports them.
  • Powershell 2.0
  • Remote Powershell enabled on the account you run the script as (using Set-User username –RemotePowerShellEnabled:$true)

You can use this on Windows Server 2003 R2, x86; no Exchange 2010 management tools are required. Enough of what you need – here’s what you need to put in your Powershell scripts to do Exchange 2007/2010:

# Add Exchange 2007. If you'll always run from the Exchange Management Shell, you don't need the next line.
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
# Exchange 2007 Commands Go Here - i.e.
Get-MailboxDatabase
# Unload Exchange 2007
Remove-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
# Create Remote Powershell session with Exchange 2010 - edit the server name in ConnetionUri
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchange.contoso.com/powershell/ -Authentication Kerberos
Import-PSSession $Session
# Exchange 2010 Commands Go Here - i.e.
Get-MailboxDatabase
# Unload Exchange 2010
Remove-PSSession $Session

If you’re looking to connect to Outlook Live instead of Exchange 2010, simply replace the line beginning “$Session =” with a couple of lines similar to this:

$LiveCred = New-Object System.Management.Automation.PSCredential "yourliveadmin@contoso.edu", (ConvertTo-SecureString "password" -AsPlainText -Force)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection -WarningAction SilentlyContinue

Hope this helps!

Steve

2 thoughts on “Writing Powershell scripts that target Exchange 2007 and 2010

  1. Pingback: Managing Office 365 and On-Premises Exchange 2010 from the same Powershell Session | Steve Goodman's Tech Blog

Leave a Reply

Your email address will not be published. Required fields are marked *