Considerations when migrating from On-Premise SfB to a CCE

Introduction

I thought I would note down some considerations when looking to migrate from an on-premise deployment of Skype for Business (SfB) to a Cloud Connector Edition (CCE). At one point there was mention that CCE and hybrid could co-exist (which would make this path much easier), but with MS Teams looking to become the primary tool in Office 365, this hasn’t come to fruition. Even if you aren’t in a hybrid configuration but you sync your on-premise AD to Azure AD, you will still have the same considerations to make.

Cut-over Migration Only

As a CCE cannot co-exist with on-premise or hybrid you will have to do a cut-over migration. This means there is no way to any real testing in advance and the window for migration might be tighter than if both deployments could run side-by-side.

If timescales are tight, look to install the CCE in advance,** but only** **if you are NOT currently using SfB in a hybrid configuration (100% on-premise). **Deploying when hybrid is in use is a bad idea!

Deploying a CCE can go one of two ways - 1. Sails through without issue or 2. You are greeted with red text in PowerShell after running Install-CCAppliance (in my experience, usually nothing is wrong and a simple retry or 6 will resolve this many hours later). With this is mind, I like to deploy the CCE in advance and know when I do cut-over, it’s ready to go.

However, if you do look to install the CCE in advance, you will come across one snag. When running Register-CCAppliance your CCE host will be unable to connect to Skype Online and register itself. This is because the lyncdiscover.domain.com will be pointing at your on-premise deployment. An easy way to see this is initiating a New-CSOnlineSession as seen below:

To get around this you can use the -OverrideAdminDomain and enter your O365 .onmicrosoft.com domain.

It is worth mentioning that the CCE and Skype Online will report all is OK once the CCE is deployed, but until your external DNS is changed to Skype Online, it will likely not work. This is because the CCE and Skype Online will be trying to talk to your on-premise deployment instead of each other!

On-Premise users will not appear in Skype for Business Admin Center

But I’m 100% on premise, not hybrid, why should Skype Online care? Well, this issue is caused by your on-premise AD syncing with Azure AD. Most user attributes are shared with Azure AD including the on-premise SfB msRTC* attributes. Skype Online notices these and assumes (quite rightly) these are an on-premise users. Unfortunately there is no way around this. You can’t have the same AD user reside on-premise and in Skype Online at the same time.

If this was a standard hybrid deployment, for the user to appear in Skype Online, we would simply migrate them across. Alas, this is CCE and as such, it is a little more complex. Before we start, let’s look at an on-premise user in Skype Online PowerShell using:

Get-CSOnlineUser -Identity "[email protected]" | select identity, interpretedusertype

You can see Skype Online correctly interprets it is a on-premise user. It will always show as hybrid, even if you’ve never federated with Skype Online. The process for moving these users to Skype Online is as follows:

  1. Remove each user from the on-premise deployment. This should remove most msRTC* attributes.

  2. In my experience there can sometimes be msRTC* attributes left over after removing from on-premise, so check the attributes for each user. In this example user there is one left over, so I cleared it.

  3. (Optional) Using miisclient.exe from Azure AD Connect confirm the changes have been Exported to Azure AD:

  4. Wait a couple of hours (can sometimes be quicker) for the changes to reflect in Azure AD and Skype Online.

  5. If you are lucky, the user will now appear in Skype for Business Admin Center.

  6. If you are unlucky, you may need to un-assign and re-assign the Skype Online license to trigger the user being added.

If we run the Skype Online PowerShell command again for the same user, we can see the user is now showing as an pure online user.

To find any users who you may have missed or to see who is remaining, you can run the following command:

Get-CSOnlineUser | Select-Object DisplayName, InterpretedUserType | Where-Object {$_.InterpretedUserType - like "Hybrid*"}

User settings do not carry over

This one should go without saying, but it’s worth mentioning anyway. If you are migrating from an on-premise deployment to a CCE Skype Online deployment, there will be no carry over of user settings - call history, contacts etc. This is because the on-premise user and the Skype Online user are completely unrelated to each other. If this is a standard hybrid (non-CCE) this isn’t the case.

Edit: Michael LaMontagne got in touch and advised he has a script to export user’s contact lists. This can be run on each user’s machine to export their contacts of the signed in user before migration. It can then be run to import the users contacts back post migration. You can find the script here.

Lync Phone Edition

I’ve added this after Michael LaMontagne got in touch about Lync Phone Edition (LPE) firmware. If you running old firmware (older than 4.0.7577.4463) on LPE your phone will not sign in to Skype Online. You should already be running the latest version on-premise, but if you are not, make sure you do BEFORE you migrate (LPE requires you to be signed in to upgrade, leaving you between a rock and a hard place as you can’t sign in to upgrade if you’ve already migrated).

Whilst on the subject of LPE, the phones cached credentials from the on-premise deployment may stop the phones from signing in to Skype Online post migration. Doing a hard reset (hold down * and # on boot) should resolve this.

One final point on LPE, once you migrate to Skype Online, have re-pointed your internal and external DNS records to Skype Online, don’t forget to remove the DHCP server options created by DHCPUtil. The DHCP options it creates can confuse LPE in trying to connect to your now defunct on-premise server. Delete these settings and reboot should solve this.

Thanks for reading

Whilst this isn’t everything covered off, I hope it helps someone looking to move from on-premise to a CCE. If you think I’ve missed anything and have something to add, don’t hesitate to get in touch!