LCS 2005 SP1 Migration to Lync 2013

My experience with a LCS 2005 SP1 migration to Lync 2013.   This was planned to be a flash cut.  

 

I started with a single front end LCS 2005 SP1 server and a single LCS Edge server.  There was no archiving or monitoring roles to worry about.  All clients were running MOC 2005 version 1.0.599.0 or 1.0.599.226.  I documented all settings on the FE and the Edge server (which can be accessed by viewing the Computer Management tool and right-clicking on Communication Server and viewing properties).

 

I first started off by advising my customer that we needed a jump server  to go from LCS to OCS and then we could get to Lync,   So we started with the goal of getting a standard edition OCS 2007 R2 server built first.

 

Steps:

1. On the new OCS2007R2 jump server I downloaded the Migration Tools https://www.microsoft.com/en-us/download/details.aspx?id=4907 

2. Doanload the OCS2007 R1 server software so you can use the LCSCMD.exe from that package.

3. Then I followed this article https://technet.microsoft.com/en-us/library/dd441370(v=office.13).aspx and ran all the commands.  When we got to the part where we had to install prep Active Directory we had to first do the Schema,Forest and Domain prep with the OCS 2007 server software and then do it again with the OCS 2007 R2 software.

 

One discrepancy in the article above was it would not let us run LCSCMD /Forest with out first having run updated the schema:

We had to run:

LcsCmd /Forest /Action:SchemaPrep
Before we could do step 3 and run

LcsCmd /Forest /Action:ForestPrep /global:configuration

 

 

I experienced: "Error: [0xC3EC7872] You have to be a root domain schema administrator to execute this task. "
To Resolve: We ran LCSCMD.exe (the OCS 2007 version) directly on the domain controller and using a different user account to resolve this.

 

 I used the following scripts after the schema, forest and domain was prepped for OCS 2007 (R1).

 

Used the scripts:
  cscript MigrateOcsGlobalSettings.vbs /Action: MigrateServerDnReferences /SearchBaseDN:DC=Contoso,DC=NET

  cscript MigrateOcsGlobalSettings.vbs /Action: MigrateUserDnReferences /SearchBaseDN:DC=Contoso,DC=NET

 

Results were successful.

 

The next step was to run:  cscript MigrateOcsGlobalSettings.vbs /Action:DeleteSystemGlobalSettingsTree

I was not comfortable running this command before all the user accounts were migrated so I didn't.

 

Next I installed the schema, forest and domain prep for OCS 2007 R2 and build a STD edition server.  I modified the OCS 2007 R2 server by:

4: Add TCP 5060 on the server in OCS 2007 R2 and added SRV record _sipinternal._tcp to the internal DNS on port 5060 (this allowed the MOC 2005 clients to connect to the OCS 2007 R2 server with out making changed to the clients)

 

5:Change OCS 2007 R2 Client Version Policy to allow all older clients to connect  (Having the MOC 2005 clients connect to an OCS 2007R2 server is NOT SUPPORTED but it worked and reduced the downtime during the migration to almost nothing)

 

The thought here was that we wanted to avoid downtime for clients but we also wanted to decommission LCS before bringing up the first Lync server.  So we moved all users over to OCS 2007 R2 and allowed the Microsoft Office Communicator 2005 clients to connect to that server.  This preserved the contact list for each user and gave us a chance to enable all users for Enhanced Presence easily.  NOTE: Having the MOC 2005 clients connect to OCS 2007R2 is completely unsupported but it worked for IM and presence only.  Coexistence between users homed on LCS and OCS did not fully work.  IM worked but presence did not.

 

6. Moved all user accounts over to the OCS 2007R2 pool. 

 

7. deleted the internal DNS record for _sip._tcp.contoso.net

 

8.  did a select all, right click, configure Communication Server Users and enabled Enhanced Presence for all users (check box).

 

9. On the LCS FE server and the LCS Edge server we ran the "Deactivate" task.

 

The next step was to install the Lync 2013 schema updates.    I first tried with Lync 2013 Deployment Wizard.  The Prepare Schema went will with no errors.  Prepare Forest gave me problems though. 

 

Forest Prep Error: 

TaskFailed: Task execution failed.

Error: Active Directory operation failed on "dc01.contoso.net". The object "CN=RTC Service,CN=Services,CN=Configuration,DC=contoso,DC=net" already exists.

 

 

So I tried to run the Lync 2010 Forest prep, it ran successfully but then when I ran the Lync 2010 Domain Prep it gave me the following error: 

ForestStateNotReady: The Active Directory forest is not prepared for Lync Server.

ForestState Not Ready: Curent state: "LC_FORESTSETTINGS_STATE_NOTREADY"

Error: An error occurred: "Microsoft.Rtc.Management.Deployment.DepolymentExeption" "Active Directory forest is not ready at this time. Either prepare the forest first, or wait for replication to complete."

 

Resolution:  Go into ADSI edit in the Default Context Container, drill down to the System folder and delete the entire "RTC Services" container and everything underneath. (This may have remained because I never completed the final step "cscript MigrateOcsGlobalSettings.vbs /Action:DeleteSystemGlobalSettingsTree" when it was time to run it)

 

Once this was resolved I was able to stand up the first Lync 2013 server.   I configured coexistence between OCS 2007 R2 and Lync 2013 and I moved some test users over to Lync.  The Lync 2013 clients were able to IM with the users that were still homed on OCS 2007 R2 and logging in with the MOC 2005 clients.  Presence worked too.  All users contact lists were maintained throughout the double move process.  I coordinated a downtime window with the customer so they would push out the Lync 2013 client and we would move all user accounts from OCS 2007R2 to the Lync 2013 pool and change the _sipinternaltls and _sipinternal DNS records to point to Lync 2013 pool name all on the same night.

 

I noticed that the federation list from the LCS Edge server did not migrate over so I had to manually add that to the Lync 2013 server.

The Client Policies did migrate over so I ended up running this script since the customer now had the CALs for all users to allow Federation and PIC.
Run: Get-CSUser | Grant-CsExternalAccessPolicy –PolicyName $null

 

Once all users were migrated over to Lync, I followed the process of removing coexistence from the Topology and deactivating the OCS 2007 server.    The migration was done.  I was honestly surprised at how painless this migration was. :)