Recently we have performed a domain migration for a customer, where we had to migrate the MySites of the users as well. In this blog post I share the relevant PowerShell scripts we used to support the migration.In our case it was a SharePoint 2010 farm, however for SharePoint 2013 you should have the same tasks as well, so hopefully you find the scripts useful.
The user naming convention has been changed during the migration, for example a user John Doe had a login name in the source domain (let’s call it simply domain) like jdoe, he has a new login name john.doe in the target domain (let’s call it newDomain).
As you now, each MySite is a separate site collection under a site collection root (like http://mysites.company.com/personal), the last part of the site collection URL is built based on the login name (for example, it was originally http://mysites.company.com/personal/jdoe). Of course, the customer wanted the MySite URLs to reflect the changes in the login name naming conventions (it should be changed http://mysites.company.com/personal/john.doe)
First, we had to migrate the SharePoint user and its permissions using the Move-SPUser cmdlet:
$sourceURL = "http://mysites.company.com/personal/jdoe"
$web = Get-SPWeb $sourceURL
$user = $web.SiteUsers["domain\jdoe"]
Move-SPUser -Identity $user -NewAlias "newDomain\john.doe" –IgnoreSID
We cannot simply change the URL of the site collection. We have to backup it and restore using the new URL as described in this post and illustrated here:
# Location for the backup file
$backupPath = "E:\data\mysite.bak"
# Set the Error Action
$ErrorActionPreference = "Stop"
Write-Host "Backing up the Source Site Collection…"-ForegroundColor DarkGreen
Backup-SPSite $sourceURL -Path $backupPath -force
Write-Host "Backup Completed!`n"
# Delete source Site Collection
Write-Host "Deleting the Source Site Collection…"
Remove-SPSite -Identity $sourceURL -Confirm:$false
Write-Host "Source Site Deleted!`n"
# Restore Site Collection to new URL
Write-Host "Restoring to Target Site Collection…"
Restore-SPSite $targetURL -Path $backupPath -Confirm:$false
Write-Host "Site Restored to Target!`n"
# Remove backup files
Write-Host "Operation Failed. Find the Error Message below:" -ForegroundColor Red
Write-Host $_.Exception.Message -ForegroundColor Red
# Reset the Error Action to Default
$ErrorActionPreference = "Continue"
Write-host "Process Completed!"
Of course, we have to change the MySite URL in the user profile properties as well as described here. We used the following script:
$waUrl = "http://mysites.company.com"
$wa = Get-SPWebApplication -Identity $waUrl
# Create Service Context for User Profile Manager
$context = Get-SPServiceContext $wa.Sites
# Get User Profile Manager instance
$upm = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
# Get the user profile for owner of the personal site
$up = $upm.GetUserProfile("newDomain\john.doe")
$up["PersonalSpace"].Value = "/personal/john.doe"
Each user is by default the primary site collection administrator of his own MySite. In my former posts I already discussed how we can change the primary site collection administrator with or without elevated permissions. See this posts for reference to change the account to the one from the new domain.
For example, the simplest version:
$targetURL = "http://mysites.company.com/personal/john.doe"
$siteAdmin = New-Object Microsoft.SharePoint.Administration.SPSiteAdministration($targetURL )
$siteAdmin.OwnerLoginName = "newDomain\john.doe"