Lost Road Sign

Cross Forest Skype for Business Migration

First I want to say, that cross forest migrations of Skype/Lync are not supported by Microsoft. Following this guide does not guarantee that Microsoft will support the environment. 

Now with that out of the way, I once had the opportunity to research, and implement a cross-forest migration of Lync 2010 to Lync 2013. In researching the scenario I discovered quickly that it was considered a non-standard scenario and not supported or documented by Microsoft. However, the business needs demanded that the migration be performed. So below is the procedure that I developed and followed to perform the migration, which took only about 3-4 hours to complete and only required less than an hour of downtime.

So fist let me say that I created a parallel environment in the destination forest. Because Skype is tied to the AD Forest level, these environments where independent of one another and did not affect one another. But the general idea is that we have two parallel environments and we will disconnect their accounts in the original environment and then connect it to the new environment and then import their contact lists.

Data Gathering

For the first few steps there is some data-gathering that needs to take place.  So it is important to establish a point where no new accounts will be sip-enabled.

Download User List

We will need to gather a list of all of the users that will be migrated. In my environment I gathered all Skype enabled users that had a specific sipaddress domain. Below is the powershell script I used for gathering the information.

 Get-CsUser -Filter {sipaddress -like "*@domain.local"} -ResultSize unlimited | export-csv usLync.csv -notypeinformation 


Friend List Migration

Download friend list for migrating users

The below code is used to export out the contact list for users from the source domain.

 Export-CsUserData -PoolFQDN "SourcePool.Domain.Local" -FileName "ExporedContacts.zip" 

Convert Data

If you are migrating between version, you will need to use the to convert the outputted XML files. Once you have the initial files copy them to a system that has the destination version of Lync tools installed and use the Convert-CsUserData Cmdlet like below to update the information into a format accepted by the current version.

 Convert-CsUserData -InputFile .contactsv2.xml -OutputFile .contactsv2.zip -TargetVersion current 

Then save the output of this process for later in the procedure.

New Accounts

Enable the Accounts in the Destination Forest

For my example I took the exported list of users from above and used that with the below PowerShell command to find and enabled the users in the new environment.

$csv = import-csv NameofFile.csv

[array]$Create = $null

 foreach ($user in $csv)


#get AD user to enable

$csuser = Get-ADUser $user.OriginatorSid | %{Get-CsAdUser $_.samaccountname}

#If the user is not enabled, enable them.

if($csuser.enabled -ne $true)


$csuser | enable-csuser -registrarpool NewPool.domain.local1 -sipaddress $user.sipaddress



Upload Exported Contacts from earlier

Use the created address book ZIP created earlier to import the address book back in so that people don’t look their Friends List.

There is already a great script on the Microsoft Gallery.

Migrate SIP Domain

Now that the users have been created and the address books have been populated, we need to move the DNS records for the services to point to the new servers.

Once that is completed, after users flush their DNS cache and log in, they should be connected to the new Servers with their contact list intact.


After that is done we need to clean up the previous environment.

Disable Migrated users

First cleanup step is to disable Lync from the previous users accounts.

 Get-CsUser -Filter {sipaddress -like "*@domain.local"} -ResultSize unlimited | set-csuser -enable:$False 

Remove Migrated SIP Domains

  1. First things first, open the Topology Builder and Download the latest topology
  2. The right click on “Lync Server 2010” and select properties.
  3. Then remove the desired SIP domains and if necessary choose a new default SIP domain.
  4. Then Publish the new Topology.
  5. After topology is published wait for replication to complete. by Running get-CsManagementStoreReplicationStatus from a lync 2010 PowerShell command.
  6. Perform the following steps on all front-end and edge servers.
    1. Run the Lync Server Deployment Wizard
    2. Choose to “Install or Update Lync Server System”
    3. After state is loaded, select Run from the “Setup or Remove Lync Server Components” option.
    4. Press next and let the steps complete.
    5. After make sure to press Run in the “Start Services section”.
    6. Check the Lync Logs to make sure system is up and no major errors in logs.


The entire process was not overly complex and as mentioned was completed in a few hours with a small outage experienced during the DNS flipping period. It is also to note that the most time consuming portion was the importing of the contact lists.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s