After moving all mailboxes from Exchange Server 2010 to 2013 we can turn our attention to the public folder migration.

exchange-2013-public-folders-01

Although Exchange Server 2013 provides support for public folders with the new modern public folders, you may wish to take this opportunity to review whether your organization needs to retain public folders at all. If they are no longer needed then removing them entirely from the Exchange organization would be simpler. However if that decision can’t be made, or they are still required for some reason, then a migration to Exchange 2013 can be performed.

Initially Microsoft provided a public folder migration method known as serial migration. Serial migration of public folders to Exchange 2013 has since been deprecated and will not be supported by Microsoft. The current method for migrating public folders to Exchange 2013 is a batch migration. You can migrate up to 500,000 public folders to Exchange 2013 with this method.

At a high level the process involves:

  1. Downloading the migration scripts
  2. Preparing for the migration
  3. Generating the CSV files
  4. Creating the public folder mailboxes in Exchange 2013
  5. Starting the migration
  6. Lock the public folders for final migration (which requires some downtime)
  7. Finalize the migration (downtime still required)
  8. Test and unlock the public folder migration

Of course the reality is that there are many caveats and ways for a public folder migration to go wrong. Generally speaking you should always refer to the TechNet article as it will document the latest requirements and limitations for a public folder migration. However you can also refer to the following resources for some additional real-world advice:

Here is an example migration for the Exchange Server Pro organization, to show you what the end to end process looks like.

Download Scripts and Prepare Organization

The public folder migration scripts have been downloaded and saved to a server that has the Exchange 2010 management tools installed.

A snapshot of the existing public folder structure, statistics, and permissions is taken. These commands are run from the Exchange 2010 management shell.

[PS] C:PFMigration>Get-PublicFolder -Recurse | Export-CliXML C:PFMigrationLegacy_PFStructure.xml

[PS] C:PFMigration>Get-PublicFolderStatistics | Export-CliXML C:PFMigrationLegacy_PFStatistics.xml

[PS] C:PFMigration>Get-PublicFolder -Recurse | Get-PublicFolderClientPermission | Select-Object Identity,User -ExpandProperty AccessRights | Export-CliXML C:PFMigrationLegacy_PFPerms.xml

Any public folders that have a backslash in the name need to be renamed to remove the backslash. To identity those folders run the following command in the Exchange 2010 management shell.

[PS] C:PFMigration>Get-PublicFolderStatistics -ResultSize Unlimited | Where {$_.Name -like "**"} | Format-List Name, Identity

Verify that no record exists of a previous public folder migration. The values returned here should be $false.

[PS] C:PFMigration>Get-OrganizationConfig | Format-List PublicFoldersLockedforMigration, PublicFolderMigrationComplete

PublicFoldersLockedForMigration : False
PublicFolderMigrationComplete   : False

In the Exchange 2013 management shell run the following commands to verify that there are no existing public folder migration requests, and no existing modern public folders.

[PS] C:PFMigration>Get-PublicFolderMigrationRequest

[PS] C:PFMigration>Get-Mailbox -PublicFolder

[PS] C:PFMigration>Get-PublicFolder

Generate CSV Files and Create Public Folder Mailboxes

With the preparation completed we can now generate the CSV files that will be used to create the new public folder mailboxes on Exchange 2013. Run the following command in the Exchange 2010 management shell. Replace the server name HO-EX2010-PF with the name of one of your public folder servers.

[PS] C:PFMigration>.Export-PublicFolderStatistics.ps1 C:PFMigrationPFSizeMap.csv HO-EX2010-PF

[10/7/2015 2:55:24 PM] Enumerating folders under NON_IPM_SUBTREE...
[10/7/2015 2:55:25 PM] Enumerating folders under NON_IPM_SUBTREE completed...6 folders found.
[10/7/2015 2:55:25 PM] Retrieving statistics from server EX2010SRV1
[10/7/2015 2:55:25 PM] Retrieving statistics from server EX2010SRV1 complete...14 folders found.
[10/7/2015 2:55:25 PM] Total unique folders found : 14.
[10/7/2015 2:55:25 PM] Exporting statistics for 14 folders
[10/7/2015 2:55:25 PM] Exporting folders to a CSV file

Review the folder sizes in the CSV file and make a decision for how big each public folder mailbox will be. This will determine the number of public folder mailboxes created to store all of the public folder data in Exchange 2013. For example, if you have 20Gb of public folder data, and choose a maximum mailbox size of 1Gb, you will end up with 20 public folder mailboxes.

The Exchange Server Pro organization has very little public folder data, so a maximum size of 10Gb will result in a single public folder mailbox.

exchange-2013-public-folders-02

[PS] C:PFMigration>.PublicFolderToMailboxMapGenerator.ps1 10000000000 C:PFMigrationPFSizeMap.csv C:PFMigrationPFMailboxMap.csv
[10/7/2015 2:56:35 PM] Reading public folder list...
[10/7/2015 2:56:35 PM] Loading folder hierarchy...
[10/7/2015 2:56:35 PM] Allocating folders to mailboxes...
[10/7/2015 2:56:35 PM] Trying to accomodate folders with their parent...
[10/7/2015 2:56:35 PM] Exporting folder mapping...

exchange-2013-public-folders-03

On an Exchange 2013 server create a public folder mailbox to be the master hierarchy mailbox.

[PS] C:\>New-Mailbox -PublicFolder Mailbox1 -HoldForMigration:$true

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       -----------------
Mailbox1                  Mailbox1             ex2013srv1       Unlimited

Run the following command to create the additional public folder mailboxes to host the public folder content. The number of mailboxes is determined by the PF mailbox map generated in the previous step. In the case of the Exchange Server Pro organization only one mailbox is required, so this step is not necessary. But in your scenario set the number of mailboxes to match the number calculated in the PFMailboxMap.csv.

[PS] C:\>$numberofmailboxes = 3

[PS] C:PFMigration>For ($index = 2; $index -le $numberOfMailboxes; $index++)
{
     $PFMailboxName = "Mailbox" + $index
     New-Mailbox -PublicFolder $PFMailboxName
}

Name                      Alias                ServerName       ProhibitSendQuota
----                      -----                ----------       -----------------
Mailbox2                  Mailbox2             ex2013srv1       Unlimited
Mailbox3                  Mailbox3             ex2013srv1       Unlimited

Migrating the Public Folders

With the new mailboxes created in Exchange 2013 we can proceed with the migration. The steps below are for migrating public folders from Exchange Server 2010 to Exchange Server 2013.

Note that you need the CSV file containing the PF mailbox map generated earlier, so copy that to a server with the Exchange 2013 management tools where you are running this command.

[PS] C:\>New-MigrationBatch -Name PFMigration -SourcePublicFolderDatabase (Get-PublicFolderDatabase -Server EX2010SRV1) -CSVData (Get-Content C:PFMigrationPFMailboxMap.csv -Encoding Byte) -NotificationEmails administrator@exchangeserverpro.net

Identity                        Status                    Type                           TotalCount
--------                        ------                    ----                           ----------
PFMigration                     Created                   PublicFolder                   1

When you’re ready to commence the initial synchronization of public folders start the migration batch.

[PS] C:PFMigration>Start-MigrationBatch PFMigration

Monitor the progress of the public folder migration batch until it reaches a state of “Synced”.

[PS] C:PFMigration>Get-MigrationBatch PFMigration

Identity                        Status                    Type                           TotalCount
--------                        ------                    ----                           ----------
PFMigration                     Synced                    PublicFolder                   1

If you have more than one public folder mailbox in Exchange 2013 you can see the status of each mailbox’s migration progress using Get-MigrationUser.

[PS] C:PFMigration>Get-MigrationUser -BatchId PFMigration

Identity                                 Batch                          Status                    LastSyncTime
--------                                 -----                          ------                    ------------
Mailbox1                                 PFMigration                    Synced                    10/8/2015 9:26:20 AM

When the Synced state has been reached the legacy public folders can be locked for the final migration. This requires downtime, the length of which depends on how much new content has been generated in public folders since the Synced state was reached and will still need to be migrated. Users will not be able to access public folders, and any email sent to mail-enabled public folders will be queued.

In the Exchange 2010 management shell run the following command to lock the public folders. In an organization with multiple public folder databases it may take several hours for all public folders in the organization to receive this change via replication.

[PS] C:\>Set-OrganizationConfig -PublicFoldersLockedForMigration:$true

With the public folders locked we can complete the migration. In the Exchange 2013 management shell run the following commands.

[PS] C:PFMigration>Set-OrganizationConfig -PublicFoldersEnabled Remote

[PS] C:PFMigration>Complete-MigrationBatch PFMigration

If you see an error that public folders need to be locked down first it’s likely that the lock down flag has not been picked up by the legacy public folder database yet, and you will need to wait a little longer.

Wait for the migration batch to reach a state of Complete. Again this can take what seems like a long time, even in a small organization with very little public folder data.

[PS] C:PFMigration>Get-MigrationBatch PFMigration

Identity                        Status                    Type                           TotalCount
--------                        ------                    ----                           ----------
PFMigration                     Completed                 PublicFolder                   1

Next, a test mailbox is set to use the Exchange 2013 public folder mailbox and used to test public folder functionality.

[PS] C:\>Set-Mailbox ex2013test -DefaultPublicFolderMailbox Mailbox1

exchange-2013-public-folders-04

With the test successful the following command is run from an Exchange 2013 server or management shell.

[PS] C:\>Get-Mailbox -PublicFolder | Set-Mailbox -PublicFolder -IsExcludedFromServingHierarchy $false

Next, the organization config is updated to indicate that the migration of public folders is complete. This command is run from the Exchange 2010 management shell.

[PS] C:\>Set-OrganizationConfig -PublicFolderMigrationComplete:$true

And finally, the following command is run from the Exchange 2013 management shell.

Set-OrganizationConfig -PublicFoldersEnabled Local

During the final migration phase when public folders were locked, regular users were unable to access the public folders in Outlook. After the migration completion flag is set above, and the users restart Outlook, they should be able to access public folders again. Any new items created by the test user should be visible as well.

exchange-2013-public-folders-05

In the next part of this article series we’ll look at decommissioning the legacy Exchange servers from the organization.

About the Author

Paul Cunningham

Paul is a former Microsoft MVP for Office Apps and Services. He works as a consultant, writer, and trainer specializing in Office 365 and Exchange Server. Paul no longer writes for Practical365.com.

Comments

  1. Prashant N

    Hi,

    I am planning migrate from Exchange 2010 SP3 RU29 to Exchange 2016. I dont have any user / admin created Public Folders. The way I checked this is MMC-> Add/Remove Snap-in-> Select “Public Folder Management Console Snap-in”, Click on Add -> Right Click on the Public folders Icon in the MMC and Click on Connect to Server ->
    I have no content / list in the “Default Public Folders”
    The “System Public Folders” has listing of : “EFORMS REGISTRY” , “OFFLINE ADDRESS BOOK” and “SCHEDULE+ FREE BUSY”

    Should these be migrated OR not?

  2. DW

    Hey Paul,

    what shell command would i run if i needed to apply permissions to the public folders after they are in 2016 mailbox?

  3. Jeremy Stevens

    Hi Paul,

    Excellent article. My question is this, we have multiple EX2010 DAGs, with each having their separate PF databases. Our EX2016 environment consists of multiple DAGs as well, one for US and one for UK. Do I have to run this same process in the US and than again in the UK in order to migrate them to 2016?

    Thanks!

  4. Réda BOUTBICHA

    Hi Paul,

    I bought the “Exchange Server 2010 to 2013 Migration Guide”, I followed the steps indicated in the guide. My infrastructure has two datacenters (primary and secondary) and two public folder databases in each site, I migrated the first public folder of the primary site, but I am blocked for the second public folder, I can not execute the command Create-PublicFolderMailboxesForMigration.ps1, because it asks me to specify the existing mailbox of the primary site, and for my case, I have created a mailbox for the public folder in the secondary site, What must i do to migrate the public folder of the secondary site?

    Best regard.
    Réda.

  5. Poorani

    Hi,

    Help me with the permission status. Is the permission also migrated by default.

  6. Dinoop

    Thanks a lot Paul. You are a champ as always. I was struggling with public folder migration from 2010 to 2016 even after referring technet docs but this page has made my job easy. Much appreciated,

    Thanks,
    Dinoop Thomas

  7. ThanosMS

    Hi Paul,

    I have a strange situation trying to migrate public folders from Exchange 2010 to 2016.
    Migration batch created and the migration process reached the “synced” status for the 5 out of 6 public folder mailboxes on Exchange 2016. The 1 out of 5 mailboxes was in “synced with errors” state. Searching the log files I found that there was one public folder that could not be mail enabled. This public folder could not be found on Exchange 2010. Only using MFCMAPI we were able to locate it, it is under the “Root Folder” at the same level with “IPM_SUBTREE” and “IPM_NON_SUBTREE”. The problem is that there is no object in AD in order for the batch to be able to mail enable it. Also using MFCMAPI, although there is the “Delete” option and I used it, the public could not be deleted. This public folder probably left from a previous migration from Exchange 2003 to 2010 and the relevant object deleted from AD.
    Is there any way to delete this public folder? “ExFolders” for Exchange 2010 also used but could not locate this public folder. Is there any other tool?

    Thanks in advance,
    ThanosMS.

  8. Ralph

    Hey Paul,

    i Have a interessting problem after migration Public Folders from 2010 to 2016.
    Migration is done and PF are working fine. But now i have noticed that the auto replay for email enabled public folders doesnt work. In Exchange 2010 its been working fine.
    Usermailboxes on 2016 working fine only PF cannot auto reply or forward mails.
    Have you any Idea?

      1. Ralph

        I have tested it create a new folder. Not working. On a Exchange 2016 Test System works fine. I have checked with MFCMAPI and the Rule is there, but no function, and now error. Looks strange

  9. Tim

    Hi Paul ,
    used your instruction to migrate folders , ran into trouble.

    Created public folder mailboxes and not public folder – therefor unable to complete migration .

    Fab article

  10. Ravinder Singh Gill

    Hi Paul,

    I have exchange 2010 calendar to migrate to exchange 2013, will your article will still work. Please advise.

    Thank you

  11. Dirk

    Hello Paul,

    I’m about to do a public folder migration from Exchange 2010 to 2013. The company also uses organizational forms in Exchange 2010. Do these get migrated the same way, or should I prepare something extra? Thanks.

  12. silverfox

    Thanks for the article but after successfully completing the migration from 2010 to 2013 , users previously able to create folder / subfolders are unable to perform that task.

    error message popup with ‘cannot create the folder’

    I have removed and added back the permission for those users but nothing seems to make it work.

  13. Michel

    Example says 10000000, but that’s 10MB, not 10GB (size is in bytes)

  14. Mike

    Paul, I am having a cross forest migration from 2010 to 2013. Is PF migration also supported cross forest? I doubt that it is possible to migrate only a couple of PFs since the old Exchange 2010 in the old forest will still be used. Thank you

  15. Mike

    Sorry meant executed on the Exchange 2013

  16. Mike

    Paul, the Powershell command executed on the Exchange 2007 (IsExcludedFromServingHierarchy=$false) was executed successfully, but the message also appeared that the PFMBX object was not modified. Do I have to worry about that? Thanks

  17. Yagnesh

    Hi Paul,

    Awesome article and a great help with my migration. I’m now at the point where i’m about to start the migration, but when running the following command:

    New-MigrationBatch -Name PFMigration -SourcePublicFolderDatabase (Get-PublicFolderDatabase -Server EX1V) -CSVData (Get-Content C:PFMigrationPFMailboxMap.csv -Encoding Byte) -NotificationEmails admin@domain.com

    I’m getting the following error:

    Column “FolderPath” is missing from the CSV file. The import process can’t continue because this column is required

    I’ve gone over the CSV file a few times and my file is as far as I can tell in the correct format according to the above output. Am I missing something? My CSV output is as below:

    FolderPath,”TargetMailbox”
    ,”PFMailbox1″
    IPM_SUBTREEPublic Email Addresses,”PFMailbox2″
    IPM_SUBTREEPublic Email Addressescareers@companyRejected,”PFMailbox3″

    Any help would be much appreciated.

    Thank You in advance.

      1. Yagnesh

        Hi Paul,

        I’ve added quotes around each of the fields and i’m still getting the same error.

          1. Yagnesh

            I’ll rename the PF and see if that works.

            Thanks Paul

          2. Yagnesh

            Hi Paul,

            I Found the solution.

            I opened the CSV in Notepad and it showed that each field had multiple quotes (“), even though the CSV when opened in Excel only showed one quote (“), so I edited the notepad version, saved it as a CSV and ran the migration and it is currently processing.

  18. Akr Ofly

    So no one has an answer to my question?

    cross forest 2010 to 2013 public folder migration??????
    cross forest 2013 to 2013 public folder migrations ?????

    I posted it earlier but no I received no reply, anyone feel like they can point me in the right direction?

    1. Akr Ofly

      Maybe third time is a charm.
      Can I get a comment regarding cross forest migration of public folders from 2010 -> 2013 ??????

      If no one feels they have an answer to offer, not even in the form of “it is not supported” then I guess I am at the wrong forum. Can someone please confirm that I am barking up the wrong tree ?

  19. Andy

    Thank you very much. It was really useful for me. Thanks to people like you who share their knowledge, people like me can do his work. Thank you again.

  20. Milton Lopez

    Answer to my own previous question about copying PFs across servers via temporary mailboxes:

    After copying the PFs to a temp mailbox deleting the 2010 PF database I was able to create 2013 PF mailbox and a test PF, but the 2013 PF mailbox it was labeled “Secondary Hierarchy”, which I took it mean it is a read-only copy of the PF hierarchy, and that the primary therefore remains on 2010 somehow. Fortunately, I was able to delete the 2013 PF mailbox and re-create the test PFs on 2010, so now I can test the standard migration route. I can only that goes well.

    At least all this testing made time for the 2013 CU 10 to be released three days ago, It’s amazing to me that is has taken that many updates to get basic functionality working on 2013. Microsoft still doesn’t know how to make good quality software without using its user base as guinea pigs, and even that hasn’t worked out that well. Sigh …

  21. Mark

    Public folder migration from 2010-2013 completed and working fine, however i have one small issue,

    Outlook 2007 clients aren’t updating the path to the new Public folder location so they can no longer access it. If i create a new Outlook profile it works fine.

    Anybody know how to force outlook to update the public folder path as i really dont want to have to manually recreate outlook profiles for every user.

  22. Akr Ofly

    So I guess the ever lasting question pops up again, what is the verdict on cross forest 2010 to 2013 public folder migration?
    In addition is cross forest 2013 to 2013 public folder migrations supported?

  23. Milton Lopez

    How about this for moving a small number of Public Folders from 2010 to 2013?:
    1- Move all mailboxes from 2010 to 2013.
    2- Copy Public Folders to temporary mailbox on 2010.
    3- Move temporary mailbox from 2010 to 2013.
    4- Delete all 2010 Public Folders and their database.
    3- Create new Public Folders mailbox on 2013, copy folders to it from temporary mailbox and set permissions.

    The question is whether 2013 will let you create a new PF mailbox even after deleting the 2010 PF database. As it is, 2013 will not create a new PF mailbox if it sees 2010 Public Folders present, so I would assume all PF remnants on 2010 would have to be gone from AD, and I am not sure what that would take.

    Doable?

  24. Manfred Preissner

    Hi there
    I accomplished to
    report all Public Folder Items to Large for Migration (larger than ~19 MB)
    by writing a short script.

    Edit: code removed

    1. Avatar photo

      Please don’t post scripts or large code samples in the comments, it breaks the layout of the page. If you have scripts to share there are many places you can do that, such as Github, the TechNet Script Gallery, or your own blog.

  25. Vishal

    Hi Paul,

    I managed to get the public folders back in Outlook 2007. I had to reset my outlook profile and they re-appeared straight after that.

    Regards,
    Vishal.

  26. Vishal

    Hi Paul,

    I followed your article to migrate public folders from Exchange 2010 to Exchange 2013. Migration got completed successfully after lot of effort, but then when users tried to click on Public Folders in Outlook 2007 – they were getting an error message – “Cannot expand the folder. The set of folders cannot be opened. Microsoft Exchange is not available. Either there are network problems or the Exchange server is down for maintenance.”

    I then rolled back the migration as per this link – http://www.vspbreda.nl/nl/2013/12/exchange-2010-to-exchange-2013-public-folder-migration/​.

    But after this – cannot see the public folder in Outlook 2007. Can you point me in the right direction, please?

    Await your response.

    Kind regards,
    Vishal.

    1. Erik

      Hi Vishal,

      Sadly enough this article (and the technet version as well) is a little outdated and lacks some essentials changes and commands. Two of these essential(!!!) Exchange powershell commands that are missing but that you need run to finalize the Public Folder migration:

      # Run this on Exchange 2013
      Get-Mailbox -PublicFolder | Set-Mailbox -PublicFolder -IsExcludedFromServingHierarchy $false

      #Run this on Exchange 2010
      Set-OrganizationConfig -PublicFoldersEnabled Local -RemotePublicFolderMailboxes $null

      The above mentioned commands need to be run after the test step mentioned in this article. You could retry the migration and then include these commands.

      Regards,

      Erik

      1. tony Holdgate

        “#Run this on Exchange 2010
        Set-OrganizationConfig -PublicFoldersEnabled Local -RemotePublicFolderMailboxes $null”

        isn’t that Exchange 2013?

  27. Erik

    Several steps of migrating public folders have changed, some commands are no longer valid or applicable. Will you update this article to reflect the required changes?

      1. Chip

        Please do because I am about to lose my job and my mind over a public folder migration. I simply cannot get the SourcePublicFolderDatabase parameter to work no matter what I try.

  28. Erik

    If you get this error: “A parameter cannot be found that matches parameter name ‘SourcePublicFolderDatabase’.” Your EMC is broken, to work around this issue start a regular powershell and run Add-PSSnapin Microsoft.exchange.*

    Regards,

    Erik

    1. Chip

      Yeah, I tried this and it still didn’t work. Any ideas?

      1. Erik

        Maybe there is another (syntax) error in the command you try to run?

  29. Luis

    Hello,
    I need to move all my public folders to new server (Exchange 2013 to Exchange 2013).
    What do i need to do?
    just migrate public folders mailboxes or need another task?
    Regards,
    Luis

  30. Emiel

    Hi Paul,

    I have migrated public folders from your blog. Now I want to uninstall Exchange from the SBS server but I get the message That the public folder contains replica’s. But the problem is when I go to the Public management console I don’t see the public folders anymore. When I these commands in powershell I see this results:

    Get-PublicFolder

    Get-PublicFolder : There is no existing PublicFolder that matches the following
    Identity: ”. Please make sure that you specified the correct PublicFolder Id
    entity and that you have the necessary permissions to view PublicFolder.
    At line:1 char:17+ Get-PublicFolder <<<< + CategoryInfo : NotSpecified: (0:Int32) [Get-PublicFolder], Mapi
    TransientException + FullyQualifiedErrorId : 5B3F93C9,Microsoft.Exchange.Management.MapiTasks
    .GetPublicFolder

    Get-PublicFolderStatistics

    Name ItemCount LastAccessTime
    —- ——— ————–
    Default 0 4-6-2015 11:27:20
    EX:/o=First Organization/ou=Exchange Adm 13 4-6-2015 2:01:21
    inistrative Group (FYDIBOHF23SPDLT)
    EX:/o=First Organization/ou=Exchange Adm 0 4-6-2015 2:45:00
    inistrative Group (FYDIBOHF23SPDLT)
    exchangeV1 401 4-6-2015 11:34:35
    Customer 1 Archive 1 4-6-2015 4:01:35
    Customer1 Contacts 1218 4-6-2015 4:01:35
    globalevents 0 4-6-2015 11:25:46
    internal 0 4-6-2015 11:25:46
    microsoft 0 4-6-2015 11:27:20
    OAB Version 2 32 4-6-2015 5:02:59
    OAB Version 3a 32 4-6-2015 5:02:59
    OAB Version 4 3 4-6-2015 5:02:59
    OWAScratchPad{6BD1DD63-D0F7-4FD4-9DFC-9C 0 4-6-2015 11:23:54
    02209F9569}
    schema-root 0 4-6-2015 11:23:54
    StoreEvents{6BD1DD63-D0F7-4FD4-9DFC-9C02 0 4-6-2015 11:23:55
    209F9569}
    /o=First Organization/cn=addrlists/cn=oa 0 4-6-2015 2:45:00
    bs/cn=Default Offline Address Book

    Any ideas?

  31. Dave

    I found this article:

    http://www.stknetwork.com/2015/02/how-to-fix-exchange-2013-set.html

    It seems to make sense, but I don’t understand why they don’t run
    Set-PublicFolderMigrationRequest –Identity PublicFolderMigration -PreventCompletion:$false

    and just run without running the above command first.
    Resume-PublicFolderMigrationRequest -Identity “000000-00000-0000-YOURREQUESTID”

    Do I run the first command using the RequestID, then the resume command? Thoughts?

    1. Avatar photo

      Looking at that article, it appears that the name of their PF migration request is “true” (as in the string value of “true”, not the boolean value of “True”). Therefore, running “Set-PublicFolderMigrationRequest -Identity PublicFolderMigration -PreventCompletion:$false” will error because the name/identity doesn’t match. That may be the same situation you’ve run into.

      1. Dave

        I think you’re right, but I was able to finish it using the RequestID like that article suggested. Quick question, now I’m completely on Exchange 2013 but need to move all the public folder contents out of the primary mailbox. I’ve been able to move all of the root public folders that were in the primary mailbox to another in Exchange 2013 CU7 using the move-publicfolderbranch.ps1 script. However, I’m getting the following error when trying to move one of my root folders that seems to have more subfolders than the others I’ve moved so far.

        [5/23/2015 7:58:40 PM] Issuing request to move the public folder branch: human resources
        WARNING: An unexpected error has occurred and a Watson dump is being generated: The call to
        ‘net.tcp://mail02.company.com/Microsoft.Exchange.MailboxReplicationService MAIL02.company.com
        (15.0.1044.22 caps:1FFF)’ failed. Error details: The formatter threw an exception while trying to deserialize the
        message: Error in deserializing body of request message for operation ‘ValidateAndPopulateRequestJob’. The maximum
        string content length quota (262144) has been exceeded while reading XML data. This quota may be increased by changing
        the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader..

        Any suggestions? I’m not sure where I need to modify MaxStringContentLength value.

  32. Dave

    My public folder migration stage has reached the “autosuspended” state at 95%. I have the exchange 2007 public folders now locked for migration. The next step is to run the following command on my 2013 server but I’m getting the following error:

    [PS] C:pfnew>Set-PublicFolderMigrationRequest -Identity PublicFolderMigration -PreventCompletion:$false
    Couldn’t find a request that matches the information provided. Reason: No such request exists in the specified index.
    + CategoryInfo : NotSpecified: (:) [Set-PublicFolderMigrationRequest], ManagementObjectNotFoundException
    + FullyQualifiedErrorId : [Server=NEIMAIL01,RequestId=0f7868ce-f5ce-46d3-99c5-167052f9f146,TimeStamp=5/16/2015 1:4
    3:56 PM] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] A7635EAD,Microsoft.Exchange.Management.Recipie
    ntTasks.SetPublicFolderMigrationRequest
    + PSComputerName : neimail01.company.com

    Any suggestions?

    Dave

  33. Tom Scott

    As an FYI.. Mailboxes still on 2010 cannot access Public Folders once they are migrated to 2013.. At least in my environment..

  34. Simtandile Mtubeli

    Sorry Sir, regarding migrating public folders from exchange 2010 to 2013. does exchange server 2010 have to have the latest service pack updated?

  35. Luis Henriques

    Hello Paul,
    We did the migration of Public Folders and everything seems to be fine with exception of Public Folders that “disappeared” (The public folders that “supposedly” disappeared, are not visible in the EAC but if you export through “Get-PublicFolder -Identity ” NON_IPM_SUBTREE” -recurse | FL> c: pf1.txt they appear as ” NON_IPM_SUBTREE DUMPSTER_ROOT DUMPSTER_EXTEND RESERVED_1 RESERVED_2″”
    These same Public Folders allow them to be sent emails but nevertheless assume the limits of configured mailboxes (in this case until we set the limits to unlimited, to test), and are showing some quota warning.
    Any ideias of what is happening?
    Regards

  36. Dave

    Paul,

    I started the public folder migration but am constantly getting stuck with “failedother” status because many of our public folders have invalid characters in their alias name.

    Error: Property expression “Public Folder Name” isn’t valid. Valid values are:
    Strings formed with characters from A to Z (uppercase or lowercase), digits from 0
    to 9, !, #, $, %, &, ‘, *, +, -, /, =, ?, ^, _, `, {, |, } or ~. One or more
    periods may be embedded in an alias, but each period should be preceded and
    followed by at least one of the other characters. Unicode characters from U+00A1 to
    U+00FF are also valid in an alias, but they will be mapped to a best-fit US-ASCII
    string in the e-mail address, which is generated from such an alias.

    Is there a way for me to remove invalid characters for all Public Folder aliases without affecting their PF email address? Right now I’m just using ADSIEdit to manually edit the mailNickname field.

    1. Avatar photo
  37. Erik Nettekoven

    Hi Paul,

    It seems that “The serial migration method is being deprecated and will no longer be supported by Microsoft. Migrating public folders to Exchange 2013 should be done with the batch migration method. See Use batch migration to migrate public folders to Exchange 2013 from previous versions for more information.”

    Does this change have any effect on your guide?

    Regards,

    Erik

  38. Dave

    Paul,

    I have to shutdown my two DAG members at my production site this weekend to replace a controller on my SAN. Should I wait until this is completed before I start my public folder migration from 2007 to 2013 or will it resume automatically after my DAG members are back online? I don’t know exactly how long my migration process is going to take. We have around 74,000 folders and roughly 11 million emails stored in public folders. I still have to generate the csv files and map them to public folder mailboxes, but just wondering about the known maintenance window I have coming up and whether I should just wait.

    Thanks,

    Dave

  39. Dave

    Paul,

    If I just run:
    get-publicfolder -identity “TestPathPublicFolderName”

    It returns the name of the folder and the parent path. If I run the full command to remove trailing spaces I get this so I do not understand because clearly it’s pulling information on that public folder.

    get-publicfolder -identity “TestPathPublicFolderName” | Set-publicfolder -Identity $_.Identity -Name $_.Name.Trim()

    You cannot call a method on a null-valued expression.
    At line:1 char:150
    + Get-PublicFolder -Identity “TestPathPublicFolderName” | Set-PublicFolder -Identity $_.Identity -Name $_.Name.Trim <<<< (
    )
    + CategoryInfo : InvalidOperation: (Trim:String) [], RuntimeExcep
    tion
    + FullyQualifiedErrorId : InvokeMethodOnNull

  40. Dave

    Paul,

    I know this is an article for 2010 to 2013 but the first step on taking a snapshot is the same for 2007. I double checked the public folder name and its correct, I even tried it with a trailing space and it returned the same error. I guess I should run the command that will remove the trailing space for all public folders. Jave you had any success with this command? If so, are there any gotchas?

  41. Dave

    Paul,

    We have migrated all of our mailboxes from Exchange 2007 to 2013 and now it’s time for the public folder migration phase. I ran the first three powershell scripts mentioned in your article to take a “snapshot” of our current public folder system. The first command to gather the public folder structure returned some errors where public folders either had a backslash or leading/trailing spaces. The PFs with the backslashes were corrected manually because there were not that many. However, there are tons of PFs with trailing spaces. I found powershell commands that are supposed to remove them from all PFs, but when I tried it against one specific PF it didn’t seem to like the trim:

    get-publicfolder -identity “TestPathPublicFolderName” | Set-publicfolder -Identity $_.Identity -Name $_.Name.Trim()

    You cannot call a method on a null-valued expression.
    At line:1 char:150
    + Get-PublicFolder -Identity “TestPathPublicFolderName” | Set-PublicFolder -Identity $_.Identity -Name $_.Name.Trim <<<< (
    )
    + CategoryInfo : InvalidOperation: (Trim:String) [], RuntimeExcep
    tion
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Any idea why this is not working? I want to run the following command to remove all but if I cannot get the above to work then I don't see this working either.

    get-publicfolder -identity "" -Recurse -ResultSize Unlimited | Foreach { Set-publicfolder -Identity $_.Identity -Name $_.Name.Trim() }

    1. Avatar photo

      Well first of all this is a 2010 to 2013 PF migration article so make sure you’ve referred to Microsoft’s guidance for 2007 to 2013 PF migration as there are some differences.

      The error “You cannot call a method on a null-valued expression.” suggests that the first part of your command, get-publicfolder -identity “TestPathPublicFolderName”, is returning nothing at all. So I would start there.

  42. Luis Henriques

    Hello Paul,

    Should we migrate / move public folders from one Exchange 2010 to an Exchange 2013 after migrating all mailboxes, or we can do it before or simultaneously?

    Regards,

      1. Mike

        After sounds logical to me.
        But after moving the Mailboxes from 2010 to 2013, can the users still access the Public Folders since the PFs are still located on the 2010?

  43. Karim CAMMOUN

    Hi Paul,

    I have used your article for a migration that worked perfect except 1 point : All access rights were replaced by only one granting custom access to the Administrator account I used for the migration !

    Any thoughts ?

  44. Milton Lopez

    Hi Paul,

    On second thought, I think there are significant differences in the way contact data is stored and managed in AD vs. a in a shared mailbox. I believe the mailbox is a better vehicle for contacts that are not part of the organization’s internal operations. Even though we can create AD contacts that are not associated with a user account, using AD to store records about people that do need access to AD resources seems counterintuitive. Also, the tools used to manage contacts in a mailbox seem better suited for this type of data.

    So I am back to why would not be able to add a Contacts folder in a shared mailbox to the Outlook Address Book, while Microsoft speaks so much of “deemphasizing” Public Folders. It just doesn’t make sense.

    Am I missing something?

    M.

  45. Milton Lopez

    Honestly, because over time we have grown used to having them in either a Contacts folder or in a Public Folder. I’m reading up of managing Exchange/AD address lists. Any pointers on the pros and cons of using them, or to good articles, blogs, books, etc. would be much appreciated.

    Thanks again,

    M.

  46. Milton Lopez

    Hi Paul.

    Not having Public Folders sounds good to us, so we moved a number of Contacts folders from under Public Folders to a shared mailbox and set the proper permissions on them. This works fine except that users with Reviewer permission cannot add the new Contacts folders to their address book – the option to do this is not there as it was for Public Folders. Evidently this puts a significant limitation on users.

    Is there a way to get this work, or some reasonable workaround?

    Thanks,

    M.

      1. Earl Kay

        Because these contact information need to remain private for only a few groups of people.

  47. Milton Lopez

    What are the pros and cons of using a shared mailbox to replace Public Folders?

      1. Chris Lehr

        Con: Gary in Accounting hired a college student to develop a custom form in 1998.

  48. Marcos Canedo

    Thanks! Great tutorial, as usual. In my scenario, spaces in mailNickname atribute on some PF System Objects cause fails on migration, solved.

Leave a Reply