Migrating to Exchange 2013 modern public folder

Few content are taken from Microsoft blogs:

Step by step process of migrating legacy Public folder to Exchange 2013 modern public folder:

Once we know how to configure Modern public folders and want to migrate it from Exchange 2007/2010 Public Folders to Exchange 2013. Here are few documentation on how to do this and is ready to get started.

Complete following tasks:

  • Verify that Daniel can start the Migration
  • Gather the data for the migration
  • Create the Public Folder Mailboxes
  • Start the Migration
  • Monitor the Migration
  • Complete the Migration

Verify that we can start the Migration:

  1. Verify the Exchange 2007/2010 server is ready:
    1. On server start Exchange Management Shell
    2. Run below cmdlet:
      Get-OrganizationConfig | FL PublicFoldersLockedforMigration, PublicFolderMigrationComplete
    3. Verify that all values returned are False
    4. Verify the Exchange 2013 server is ready:
      1. Run the following Commands:
        Get-PublicFolderMigrationRequest
        Get-Mailbox -PublicFolder
        Get-PublicFolder

 

  1. If any of these commands return anything then you will need to clean up the 2013 side with these commands:
    Get-MailPublicFolder | where {$_.EntryId -ne $null} | Disable-MailPublicFolder -Confirm:$false
    Get-PublicFolder -GetChildren \ | Remove-PublicFolder -Recurse -Confirm:$false
    Get-Mailbox -PublicFolder |Remove-Mailbox -PublicFolder -Confirm:$false

Gather the data for the migration:

  1. Copy the script Export-PublicFolderStatistics.ps1 from \\Exchange2013\c$\program files\microsoft\exchange server\v15\scripts to \\LegecyExchange\c$\program files\microsoft\exchange server\v14\scripts
  2. On server LegecyExchange start the Exchange Management Shell
  3. Run cd $exscripts to change to the Exchange Scripts directory
  4. Run .\Export-PublicFolderStatistics.ps1 -ExportFile C:\stats.csv -PublicFolderServer LegacyExchange to create the export file.
  5. Copy the file stats.csv from the C:\ drive of LegecyExchange to the C:\ drive of Exchange 2013
  6. On server Exchange 2013 start the Exchange Management Shell
  7. Run cd $exscripts to change to the Exchange Scripts directory
  8. Run the script to create the CSV Map File:
    . \PublicFolderToMailboxMapGenerator.ps1 -importfile c:\stats.csv -exportfile c:\pfmap.csv -mailboxsize 500kb

* Note: We are using a Mailbox Size of 500kb here so that it put the folders in multiple Mailboxes.  Powershell Understand KB, MB, GB so for production environments you could use "25GB" for a 25 Gigabyte Mailbox.

  1.  Examine the pfmap.csv file to see how the script divided up the Public Folders.

Create the Public Folder Mailboxes:

  1. We need to create the Public Folder Mailboxes are outlined in the CSV File.
  2. If you doesn't like the names "Mailbox1" etc and want to create your Public Folder Mailboxes as "PFMB1" etc.
  3. Open c:\pfmap.csv in notepad
  4. Click Edit -> Replace
  5. Fill in Mailbox for what to find and PFMB for what to replace it with
  6. Click Replace All
  7. Click Cancel
  8. Manually rename the header back to TargetMailbox from TargetPFMB
  9. Click File -> Save
  10. Now we need to create all of the Public Folder Mailboxes from the CSV file.
    1. Run the Following command on Exchange 2013 to create the Mailboxes:
      (Import-CSV c:\pfmap.csv) | Select-Object -Property TargetMailbox -Unique | foreach { new-mailbox -name $_.targetmailbox -Publicfolder -HoldForMigration }

Start the Migration:

  1. Now that the Mailboxes are created and we can start the Migration
  2. On Exchange 2013 start the Exchange Management Shell
  3. Run the following command to start the migration:
    New-PublicFolderMigrationRequest -SourceDatabase (Get-PublicFolderDatabase -server cone10) -csvdata (Get-content c:\pfmap.csv -encoding byte)

Monitor the Migration:

  1. To Check on the status of the migration run:
    Get-PublicFolderMigrationRequest | Get-PublicFolderMigrationRequestStatistics
  2. Once it has reached a state of Autosuspended it is ready to complete.

Lock the 2010 Legacy Folders (Use workaround):

  1. Before completing the 2013 Side we need to lock the LegecyExchange side
  2. On LegecyExchange server start the Exchange Management Shell
  3. Run the command Set-OrganizationConfig -PublicFoldersLockedForMigration:$true
  4. Restart the store service so that it picks up this change:
    Restart-Service MSExchangeIS

Workaround:

  1. Open ADSIEdit.msc
  2. Open the Configuration Container
  3. Bring up the properties of the Exchange Org Object
  4. Locate the property Heuristics
  5. Set the Value to 2048
  6. Close ADSIEdit
  7. Restart the MSExchangeIS service on LegecyExchange
    Restart-Service MSExchangeIS

Complete the Migration:

*Note: There are four phases while completing the migration. Once migration reach to 95 % it will lock public folder access to end users on Exchange 2010/2007. After reaching to 95 % it will go with below phases:

  1. InitialSeeding
  2. Completion             
  3. Finalization
  4. Completed

 

  1. Allow the Migration Requests to finish by running this command:
    Get-PublicFolderMigrationRequest | Set-PublicFolderMigrationRequest -PreventCompletion:$false
  2. Resume the Migration so that it can finish:
    Get-PublicFolderMigrationRequest | Resume-PublicFolderMigrationRequest
  3. The Migration will enter a completed state
  4. Within a few Minutes if you open the Outlook 2013 Client on Exchange 2013 and you will see the Migrated Folders and their contents.

 

 

Lock down the public folders on the legacy Exchange server for final migration (downtime required):

The amount of downtime required depends on how much new content was generated since the migration reached the AutoSuspended state. If a long time has passed between the migration request reaching an AutoSuspended state and when you can finalization the migration, we recommend that you run the following command so you can synchronize the changes made since the original synchronization. This will reduce the amount of downtime required to finalize the migration.

 

  1. On Exchange 2013 server run below cmdlet to resume the migration:
  • Resume-PublicFolderMigrationRequest \PublicFolderMigration

 

  1. On the legacy Exchange server (Exchange 2010), run the following command to lock the legacy public folders for finalization.
  • Set-OrganizationConfig -PublicFoldersLockedForMigration:$true

Note: If your organization has multiple public folder databases, you’ll need to wait until public folder replication is complete to confirm that all public folder databases have picked up the PublicFoldersLockedForMigration flag and any pending changes users recently made to folders have converged across the organization. This may take several hours.

 

Finalize the public folder migration (downtime required):

 

By default, when you run the Set-PublicFolderMigrationRequest cmdlet, it won’t complete until you remove the PreventCompletion flag and resume the migration request.

 

  • Set-PublicFolderMigrationRequest -Identity \PublicFolderMigration -PreventCompletion:$false
  • Resume-PublicFolderMigrationRequest -Identity \PublicFolderMigration

 

Test and unlock the public folder migration:

 

After you finalize the public folder migration, you should run the following test to make sure that the migration was successful. This allows you to test the migrated public folder hierarchy before you switch to using Exchange 2013 public folders.

 

  1. Run the following command to assign some test mailboxes to use any newly migrated public folder mailbox as the default public folder mailbox.
  • Set-Mailbox -Identity <Test User> -DefaultPublicFolderMailbox <Public Folder Mailbox Identity>

 

  1. Log on to Outlook 2007 or later with the test user identified in the previous step, and then perform the following public folder tests:

a)      View the hierarchy.

b)      Check permissions.

c)       Create and delete public folders.

d)      Post content to and delete content from a public folder.

 

Microsoft article: https://technet.microsoft.com/en-us/library/jj150486(v=exchg.150).aspx

 

 

 

Thank you,

Mukut-