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.
No comments:
Post a Comment