Migrate Public Folder to Exchange 2010

Migrate Public Folder to Exchange 2010

One of the challenges for Microsoft Exchange 2003/2003 migration to Exchange 2010 is Public Folder. It can be very complicated and time-consuming if the Public Folder size is huge of lot of folders. The Public Folder is required for Outlook 2003 to continue access to Exchange 2010 server.
Microsoft Exchange provided the following PowerShell script for Public Folder migration in\v14\ Server\Scripts:

PowerShell Script Task Description
AddReplicaToPFRecursive.ps1 Add a server to the replication list
AggregatePFData.ps1 Aggregate data across all public folder replicas
RemoveReplicaFromPFRecursive.ps1 Remove a server from the replication list
MoveAllReplicas.ps1 Replace a server in the replication list
ReplaceReplicaOnPFRecursive.ps1 Replace a server in the replication list with a new server


Add new Exchange 2010 Server into Public Folder replication list

Launch the Exchange Management Shell and the go to the Exchange script folder:

cd $exscripts


Let’s say you current environment have either or both the EX2003 and EX2007. The new Exchange 2010 server name is EX2010. Below is the command you need to run in EXC2010 server.

To replicate all the non-system public folders for the top root to EX2010:

.\AddReplicaToPFRecursive.ps1 –TopPublicFolder \ –ServerToAdd  EX2010


To replicate all the System folders to EX2010:

.\AddReplicaToPFRecursive.ps1 -TopPublicFolder “\NON_IPM_SUBTREE” -ServerToAdd EX2010


*The replication might take up to days or even week depending on your Public Folder size

Common mistake or misconception:

  1. Make sure the ServerToAdd is the new Exchange 2010 server that you need you has a replica of Public Folder.
  2. Not to worry about which server is currently holding which part/folder of the Public Folder. The AddReplicaToPFRecursive.ps1 command to find by itself and then add to new server
  3. Do not point ServerToAdd to existing old server (Exchange 2003 or 2007 server) because it will add the Public Folder replica to this old server.  It might cause this old server to jam up if there is not enough space to hold all the public folder copy (because most of these old Exchange servers are running almost out of this space). 


To verify the Public Folder was replicated to new server:

Get-PublicFolder -Recurse | fl Name, Replicas


To verify the System Folders was replicated to new server:

Get-PublicFolder -recurse \non_ipm_subtree |fl name, replicas


Remove Public Folder from old server

To remove Public Folder replica from old server:

.\RemoveReplicaFromPFRecursive.ps1 –TopPublicFolder \ -ServerToRemove EX2003


To move all the Public Folder (including System folders) from old server (EX2003) to new server (EX2010):

.\MoveAllReplicas.ps1 –server EX2003 –NewServer EX2010


PowerShell cmd-let to verify Public Folder replica and replication:

Get-PublicFolder -Recurse | fl Name, Replicas

Get-PublicFolder -recurse \non_ipm_subtree |fl name, replicas

Get-PublicFolderStatistics -server E2010

Get-PublicFolderStatistics -server E2003


Additional clean-up task

Some of the System folder might not have the new Exchange 2010 server in the replication list. Here are the steps for check:

.\Get-PublicFolder “\NON_IPM_Substree\Schedule+ Free Busy” -recurse |fl name, replicas

If case that new Exchange 2010 server in not holding the Schedule+ Free Busy replica, you might get the event id 14029 with the error message of “Couldn’t find an Exchange 2010 or later public folder server with a replica of the free/busy folder…”

event id 14029
event id 14029

Perform the following command to resolve event id 14029 issue:

.\AddReplicaToRecursive.ps1 -TopPublicFolder “\NON_IPM_Substree\Schedule+ Free Busy” -ServerToAdd EX2010


Perform the same checking and rectification for other System folder (e.g. EForms Registry and Offline Address Book)

.\AddReplicaToPFRecursive.ps1 -TopPublicFolder “\NON_IPM_Subtree\EFORMS REGISTRY” -ServerToAdd EX2010

.\AddReplicaToPFRecursive.ps1 -TopPublicFolder “\NON_IPM_Subtree\OFFLINE ADDRESS BOOK” -ServerToAdd EX2010


Move Offline Address Book (OAB) generation to new Exchange 2010 server (that holds the Mailbox role)

Move-OfflineAddressBook “Default Offline Address List” –Server EX2010


Reference and Resource