There are lots of great blogs out there on how to do the overall migration of Public folders from previous versions of Exchange to 2013, but few of them detailed how to deal with a few choice issues that I encountered in a recent migration that I performed.
For a good, detailed, checklist of how to do the migration, see any of the following:
My migration was for 50,000 folders, and about 130GB of data.
The issues that I ran into were (but not limited to):
Each of these had to be fixed before I could start the migration.
System Attendant Mailbox required
This is actually fairly well documented, but I had missed it and the symptoms in no way pointed me to the root cause of the problem.
Basically, each server that hosts a Public Folder requires this System Attendant mailbox. In my case I had no Mailbox Databases on the PF servers.
The symptom is that in the detailed log of the PublicFolderMigrationRequest indicated "
Transient Error: MapiExceptionUnknownUser: Unable to make connection to the server. (hr=0x80004005, ec=1003)
This was resolved by creating a mailbox database on each server, and then also restarting the "Microsoft Exchange System Attendant" service. That created the system attendant ID automatically.
Spaces at the end of a folder name
The first problem was identified when I ran the command
Get-PublicFolder -Recurse | Export-CSV C:\PFs\2010_PFStructure.csv -NoTypeInformation
This was easy to fix following this article:
The issue with this simple script is that the script in this article runs against all folders.
Get-PublicFolder -Identity "\" -Recurse -ResultSize Unlimited | Foreach { Set-PublicFolder -Identity $_.Identity -Name $_.Name.Trim() }
To improve this, I modified the command to skip folders that did not need to be updated. Speeds up the command significantly. I also added a log file entry for each folder being processed.
$Logfile = "Fix-Trimmed-Names-001.log"
Get-PublicFolder -Identity "\" -recurse -ResultSize Unlimited | %{
write-host "Scanning $($_.identity)";
add-content $logfile -value "Scanning $($_.identity)";
if ($_.name -ne $_.name.trim() ) {
write-host "fixing [$($_.name)]" -foregroundcolor yellow;
add-content $logfile -value "fixing [$($_.name)]"
Set-PublicFolder -Identity $_.Identity -name $_.name.trim()
}
}
Invalid characters in the Alias attribute
The Alias property of a Public Folder cannot contain Spaces, Periods, Commas, @, and even an Apostrophe. The following script removed these characters. (Note that the script is a little rough, but you can figure it out).
[PS] >type .\Fix-Alias-001.ps1
$Names = get-mailpublicfolder -resultsize unlimited |?{$_.Alias -like "* *"}
#$Names = get-mailpublicfolder -resultsize unlimited |?{$_.Alias -like "*.*"}
foreach ($name in $Names) {
$newAlias = $name.alias
$newAlias = $newAlias.replace(" ","_")
$newAlias = $newAlias.replace("@","&")
$newAlias = $newAlias.replace("(","{")
$newAlias = $newAlias.replace(")","}")
$newAlias = $newAlias.replace(",","~")
$newAlias = $newAlias.replace(".","~")
$newAlias = $newAlias.replace("'","~")
set-mailpublicfolder -identity $name.identity -alias "$newalias"
}
Invalid SMTP email addresses in Mail-Enabled Public Folders
This seems to have occurred for reasons similar to the Alias issue. I was told that the users did not intentionally create Public Folders as Email-Enabled, therefore, rather than dig into fixing each of the mailboxes to change teh SMTP name, we elected to simply run a "Disable-MailPublicFolder" against each of the mail-enabled public folders. End of issue.
For a good, detailed, checklist of how to do the migration, see any of the following:
My migration was for 50,000 folders, and about 130GB of data.
The issues that I ran into were (but not limited to):
- Needing a System Attendant mailbox on each server hosting Public Folders
- Spaces at the end of the names of folders
- Invalid characters in the Alias attribute, and
- Invalid SMTP email addresses in Mail-Enabled Public Folders
Each of these had to be fixed before I could start the migration.
System Attendant Mailbox required
This is actually fairly well documented, but I had missed it and the symptoms in no way pointed me to the root cause of the problem.
Basically, each server that hosts a Public Folder requires this System Attendant mailbox. In my case I had no Mailbox Databases on the PF servers.
The symptom is that in the detailed log of the PublicFolderMigrationRequest indicated "
Transient Error: MapiExceptionUnknownUser: Unable to make connection to the server. (hr=0x80004005, ec=1003)
This was resolved by creating a mailbox database on each server, and then also restarting the "Microsoft Exchange System Attendant" service. That created the system attendant ID automatically.
Spaces at the end of a folder name
The first problem was identified when I ran the command
Get-PublicFolder -Recurse | Export-CSV C:\PFs\2010_PFStructure.csv -NoTypeInformation
This was easy to fix following this article:
The issue with this simple script is that the script in this article runs against all folders.
Get-PublicFolder -Identity "\" -Recurse -ResultSize Unlimited | Foreach { Set-PublicFolder -Identity $_.Identity -Name $_.Name.Trim() }
To improve this, I modified the command to skip folders that did not need to be updated. Speeds up the command significantly. I also added a log file entry for each folder being processed.
$Logfile = "Fix-Trimmed-Names-001.log"
Get-PublicFolder -Identity "\" -recurse -ResultSize Unlimited | %{
write-host "Scanning $($_.identity)";
add-content $logfile -value "Scanning $($_.identity)";
if ($_.name -ne $_.name.trim() ) {
write-host "fixing [$($_.name)]" -foregroundcolor yellow;
add-content $logfile -value "fixing [$($_.name)]"
Set-PublicFolder -Identity $_.Identity -name $_.name.trim()
}
}
Invalid characters in the Alias attribute
The Alias property of a Public Folder cannot contain Spaces, Periods, Commas, @, and even an Apostrophe. The following script removed these characters. (Note that the script is a little rough, but you can figure it out).
[PS] >type .\Fix-Alias-001.ps1
$Names = get-mailpublicfolder -resultsize unlimited |?{$_.Alias -like "* *"}
#$Names = get-mailpublicfolder -resultsize unlimited |?{$_.Alias -like "*.*"}
foreach ($name in $Names) {
$newAlias = $name.alias
$newAlias = $newAlias.replace(" ","_")
$newAlias = $newAlias.replace("@","&")
$newAlias = $newAlias.replace("(","{")
$newAlias = $newAlias.replace(")","}")
$newAlias = $newAlias.replace(",","~")
$newAlias = $newAlias.replace(".","~")
$newAlias = $newAlias.replace("'","~")
set-mailpublicfolder -identity $name.identity -alias "$newalias"
}
Invalid SMTP email addresses in Mail-Enabled Public Folders
This seems to have occurred for reasons similar to the Alias issue. I was told that the users did not intentionally create Public Folders as Email-Enabled, therefore, rather than dig into fixing each of the mailboxes to change teh SMTP name, we elected to simply run a "Disable-MailPublicFolder" against each of the mail-enabled public folders. End of issue.
Comments
Post a Comment