ExportImport-ForwardingAddress.ps1
<#PSScriptInfo
.VERSION 3.2 .GUID 87f572c4-2e90-4d42-b743-394b69ee432a .AUTHOR Aaron Guilmette .COMPANYNAME Microsoft .COPYRIGHT 2020 .TAGS .LICENSEURI .PROJECTURI https://www.undocumented-features.com/2018/09/13/forwarding-address-import-and-export/ .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .DESCRIPTION Use to export/backup forwarding addresses from one environment and restore/import into a target environment. .PRIVATEDATA #> <# .SYNOPSIS Use to export/backup forwarding addresses from one environment and restore/ import into a target environment. This script captures two types of forwards: - Exchange Forwarding object: A mail-enabled Exchange object, such as a mailbox, mail-enabled user, or mail contact. - Generic SMTP Forward: an SMTP address value that may be internal or external to the organization. Forwards are imported/restored as Generic SMTP forwards in the target environment. .PARAMETER Domain Use to filter source objects based on SMTP suffix. .PARAMETER Filename Import or export filename. .PARAMETER Mode Export or Import. .EXAMPLE .\ForwardingExportImport.ps1 -Domain sub.contoso.com -Filename sub.contoso.com.csv -Mode Export Exports forwarding parameters for mailboxes in the sub.contoso.com domain to file sub.contoso.com.csv. .EXAMPLE .\ForwardingExportImport.ps1 -Filename sub.contoso.com.csv -Mode Import Imports forwarding parameters for mailboxes in the file sub.contoso.com.csv. .LINK https://gallery.technet.microsoft.com/Forwarding-Address-Import-5b3ead8e .NOTES - 2019-02-09 Updated line 72 to reflect missing -Filter parameter. - 2018-09-12 Updated cmdlet to use server side filter to speed up results. - 2018-04-05 Updated else {} statement to include DeliverToMailboxAndForward value. - 2017-11-21 Removed windows file dialog box and changed import/export to parameter-based. Combined separate Get/Set scripts into single script with export / import capability. - 2015-02-19 Original release. #> [CmdletBinding()] param ( [Parameter(Mandatory = $false)][string]$Domain, [Parameter(Mandatory = $true)][string]$Filename = "ExportForwardingSmtpAddresses.csv", [Parameter(ParameterSetName='Mode',Mandatory = $true)][ValidateSet("Export","Import")][string]$Mode ) Switch($Mode) { Export { $global:Domain = $Domain.ToString() $global:Domain = [scriptblock]::create("WindowsEmailAddress -like `"*$Domain`"") If ($Domain) { $cmd = "`$Users = Get-Mailbox -ResultSize Unlimited -Filter {((ForwardingAddress -ne `$null) -or (ForwardingSmtpAddress -ne `$null)) -and (WindowsEmailAddress -like `"*" $cmd = $cmd + $Domain $cmd = $cmd + "`")}" Invoke-Expression $cmd Write-Host "Found $($users.Count) users in $($Domain)." } Else { $Users = Get-Mailbox -ResultSize Unlimited -Filter { (ForwardingAddress -ne $null) -or (ForwardingSmtpAddress -ne $null) } Write-Host "Found $($Users.count)." } $header = "UPN,ForwardingSmtpAddress,DeliverToMailboxAndForward" $header | Out-File $Filename ForEach ($User in $Users) { # Check to see if there is a Forwarding Smtp Address or a Contact Object # Check to see if "forwardingSmtpAddress" value Write-Host -NoNewline "Processing ";Write-Host -ForegroundColor Green $user.PrimarySmtpAddress if ($user.ForwardingSmtpAddress -ne $null) { Write-Host " Forwarding SMTP address found." Write-Host -ForegroundColor Yellow " $($user.PrimarySmtpAddress) > $($user.ForwardingSmtpAddress)" $forwardingSmtpAddress = $user.ForwardingSmtpAddress $DeliverToMailboxAndForward = $User.DeliverToMailboxAndForward.ToString() $logstring = "$($user.PrimarySmtpAddress),$($forwardingSmtpAddress),$($DeliverToMailboxAndForward)" $logstring | Out-File $Filename -Append } else { # Check to see if "forwarding contact" or "Forwarding Address" if ($user.ForwardingAddress -ne $null) { Write-Host " Forwarding address (CONTACT, DISTRIBUTION GROUP, MAILBOX, OR MAILUSER) object found." Write-Host -ForegroundColor Yellow " $($user.PrimarySmtpAddress) > $($User.ForwardingAddress)" $forwardingContact = $user.ForwardingAddress $forwardingContactAddress = (Get-Recipient $forwardingContact).PrimarySmtpAddress $DeliverToMailboxAndForward = $User.DeliverToMailboxAndForward.ToString() Write-Host -ForegroundColor Yellow " $($User.ForwardingAddress) > $($forwardingContactAddress)" $logString = "$($user.PrimarySmtpAddress),$($forwardingContactAddress),$($DeliverToMailboxAndForward)" $logString | Out-File $Filename -Append } } } } # End Export Import { $Users = Import-Csv $Filename ForEach ($user in $users) { Write-Host -ForegroundColor Green "Setting $($user.UPN) forwarding address to $($user.ForwardingSmtpAddress)" $DeliverToMailboxAndForward = [System.Convert]::ToBoolean($User.DeliverToMailboxAndForward) Set-Mailbox -Identity $($user.UPN) -DeliverToMailboxAndForward $DeliverTomailboxAndForward -ForwardingSmtpAddress $($user.ForwardingSmtpAddress) } } } |