The Problem
In my most recent migration I had a customer that was moving from Exchange 2010 to Exchange 2016. In doing to we needed to configure coexistence for Public Folders. The reason is that with Public Folders, if a mailbox is on Exchange 2016, it can access Public Folders on Exchange 2016 AND Exchange 2010. However, a user with a mailbox on Exchange 2010 can only access Public Folders on Exchange 2010. This is due to the way that Microsoft has always proxied requests from a higher version to a lower version, but never in the reverse (exception now would be 2013/2016).
With this particular migration we configured the coexistence per Microsoft’s own documentation:
https://technet.microsoft.com/en-us/library/dn690134(v=exchg.150).aspx
The client had two Exchange 2010 Servers with Public Folder database replicas on both servers. This means two new mailboxes to serve as proxies and two new mailbox databases according to Microsoft. We set this up and it appeared to work for IT (Outlook 2016) and myself (Outlook 2013). We gave the testing a green light and proceeded to move a lot of mailboxes. When these users moved to Exchange 2016 we started getting weird reports of Public Folders not expanding.
Troubleshooting
To resolve the issue, we performed the following steps:
- Gathered up names of users with issues.
- verified the ‘EffectivePublicFolderMailbox’ property on the user’s mailbox
- Reviewed the Exchange Organization Config with ‘Get-OrganizationConfig’ to verify each Public Folder Proxy Mailbox was configured.
- Verified mailbox database for Public Folder mailbox was mounted.
- Verified Outlook up to date
- Tried a new profile – same results
After all of this it appeared that everything was properly configured. After a bit of research online about this I was able to dig up a KB article from Microsoft Explaining the issue.
https://support.microsoft.com/en-us/help/3177600/outlook-can-t-access-public-folders-hosted-on-legacy-exchange-servers
With this article in hand we checked the DefaultPublicFolderMailbox setting to see which proxy mailbox was being used. We then checked the users database ‘Public Folder Database’ property and compared that against the one for the Public Folder Proxy mailbox. What we found out was there was a mismatch. with over 1000+ mailboxes, we determined around half were configured incorrect according to Microsoft. In order to fix this, we simply made a system of matching the same Public Folder database between the one the user was pointed to and the one the Public Folder mailbox’s database was pointed to.
Here is how it looks visually:
To fix the issue, we need the everything to line up like so:
We need the mailbox for the user and the mailbox for the Proxy Public Folder mailbox (which is a property of the mailbox) to point to the same Public Folder Database.
Using PowerShell for Discovery
We can use PowerShell to discover what doesn’t match. In the sample below, I put in the known values of what the Public Folder Proxy mailbox should be (according to the database the mailbox is in) and then I compare that versus what is set in the ‘Effective Public Folder Mailbox’ attribute on the users mailbox. If these don’t match, I report the values back in yellow for emphasis and if they are correct, I can just report it back as regular white text.
$Servers=@() $Servers = 'Server1','Server2' Foreach ($Server in $Servers) { $Mailboxes = Get-Mailbox -server $Server Foreach ($Mailbox in $Mailboxes) { $Name = $Mailbox.name $EPFM = $Mailbox.EffectivePublicFolderMailbox $Database = $Mailbox.database $PFDB = (Get-MailboxDatabase).PublicFolderDatabase $PFMBX = $EPFM -split '/' $UsersPublicFolderMailbox = $PFMBX[2] If ($Database -eq 'DB1') { If ($EPFM -notlike '*PFProxyMbx01') { Write-host "$Name,$UsersPublicFolderMailbox,PFProxyMbx01,$Database" -ForegroundColor Yellow } Else { Write-host "$Name,$UsersPublicFolderMailbox,PFProxyMbx01" } } If ($Database -eq 'DB2') { If ($EPFM -notlike '*PFProxyMbx02') { Write-host "$Name,$UsersPublicFolderMailbox,PFProxyMbx02,$Database" -ForegroundColor Yellow } Else { Write-host "$Name,$UsersPublicFolderMailbox,PFProxyMbx02" } } } }
This script can produce a list of users affected and needed to be fixed. IT simply checks to make sure that the values match as expected:
If I need to correct this, I can use a script like the one below with some pre-populated values as well:
Get-Mailbox -Database USDB05 | Set-Mailbox -DefaultPublicFolderMailbox PFProxyMbx01
This snippet of code makes sure that all mailboxes in this mailbox database get the correct Public Folder mailbox. For migrations, we can pre-create scripts like this to make sure all the mailboxes, even newly moved ones, have the correct Public Folder Proxy mailbox.
Hope this code and article help you out in your migrations to Exchange 2016.
** Note ** As a side note, this is also effective or useful for Exchange Online moves as well. The same configuration and alignment of Public Folder proxy mailboxes apply the same way and can cause issues with users if not configured the same way.
I’m curious what script you are referencing when you say “If I need to correct this, I can use a script like the one below with some pre-populated values as well:”
I’ve run across this exact issue.
Thanks for checking that, it looks like my code got lost in translation on the WordPress page. Just fixed it and added the one-liner that should have been there all along. Let me know if the code helps.
This is great thanks so much for this, we are about to perform these changes prior to migrating mailboxes from 2010 to 2016 so this is invaluable.
One question do you have any idea why there was a mismatch? will be looking to avoid a reactive issue like this so will hope to catch it prior to migration, just unclear as to why you experienced it on those mailboxes after the initial change referenced here: https://docs.microsoft.com/en-us/exchange/configure-legacy-public-folders-where-user-mailboxes-are-on-exchange-2013-servers-exchange-2013-help
TBH, no idea. We were able to come up with a solution that worked for the client and moved the migration along.
Hi Guys,
Did anybody had any issues after migration of public folders to exchange 2016 with o365 users ? In the combination 2010 and 2016 with proxy PF mailboxes it worked but after migration users from 0365 can’t access PF mailbox on exchange 2016. And they have DefaultPublicFolderMailbox set up.
I did have one client where we started off with the ‘EffectivePublicFolderMailbox’ automatically configured by Exchange Online. After a bit of deduction, we found we had one server that would not answer Public Folder proxy requests. Ended up just using the ‘DefaultPublicFolderMailbox’ value to direct all requests to one server. For another client, they used databases that were in place prior to migration. While this is a supported option, it failed to work for them. Their solution was to create new databases (the first option Microsoft recommends) and moved the Public Folder Mailboxes there. Once that was done, they did not experience any further issues. For your issue, do you have more than one Public Folder mailbox? If so, have you tried to hard code them for you O365 users? Also, are your Public Folder Mailboxes on new databases or existing databases? For support sake, What CU are you also running on Exchange 2016 and what version of Exchange 2010 are you using?
When I try to run the command you reference (Get-MailboxDatabase USDB05 | Set-Mailbox -DefaultPublicFolderMailbox PFProxyMbx01) it fails with an error that the database object couldn’t be found on the domain controller. Get-MailboxDatabase for the same database returns the expected results.
Any thoughts on why this might be happening?
Shane – the cmdlet should have been like this –> ‘Get-Mailbox -Database USDB05 | Set-Mailbox -DefaultPublicFolderMailbox PFProxyMbx01’. Sorry about that!