The Microsoft Skype for Business 2015 CU1
has been released (available here https://www.microsoft.com/en-us/download/confirmation.aspx?id=47690)
and installing it has added a few new challenges. Microsoft has
added some new safety features to prevent you from messing with the fabric
which is a good thing – getting them to actually work as documented is another
Starting with the CU1 in Skype for
Business Microsoft has added an install blocker if the Skye services on the
machine you are installing are running. Interestingly the check includes the
Skype services and the Fabric but not the web services which the Stop-CsWindowsServices includes. If you
attempt to patch a server without stopping the services a dialog similar to
The actual list of services will depend
on the machine type that is being upgraded as well as the state of the services
on that machine. Following the install documentation at https://support.microsoft.com/en-us/kb/3061064 it informs you to run Invoke-CsComputerFailover
–NoStop –ComputerName <FQDN>. This is a new command that sounds great
yet I was unable to get to add any value on a 3-node Pool.
As we know, the UpgradeDomains on a 3-node
pool include one server per domain; so invoke the failover without stopping the
services (-NoStop) adds no value and in my case just hung the process. On my
first node I ran the command as instructed and sat with the feedback of the
I broke out of the command and performed a
simple Stop-CsWindowsService on the
computer and began the shutdown process. It did sit for a while at the Fabric
but no longer than a minute.
Once the services were stopped I was able to
run the Update and received the typical feedback windows showing me what was
and was not up to date. In this case, everything was marked as out of date and
there were even two new installs on the FEs (one on the Edge and PChat
The installer worked its magic and upgraded
all of the services just fine. Once complete I needed to start my services so Start-CsWindowsService –NoWait was invoked
and the command to start all services was issued. I prefer the –NoWait as the
services start quicker and I don’t have to sit there. It is a good idea to run Get-CsWindowsService at some point after
issuing the start command to see what’s started, starting, and yet to be
Once everything was up and Get-CsPoolUpgradeReadinessState was 3/3,
I moved on to the second node. Thinking that maybe the first node and its
fabric was just in a weird state I attempted to invoke the computer failover
again…and it hung again but this time it looked different.
Once again I broke out of the command and
manually stopped the services so I could begin the upgraded. Once the install
was complete I started all the services once again BUT when I ran the Get-CsPoolUpgradeReadinessState I received a Fabric warning.
Apparently the Invoke-CsComputerFailover was doing something and running Invoke-CsComputerFailBack –ComputerName
<FQDN> corrected the problem.
Having so much fun with the
CsComputerFailover command I attempted to use it once more on the third node,
this time excluding the –NoStop option as again, if it had worked I would then
be stopping the services anyway so it was invoked and what do you know - it
worked. The services were draining and so the process took much longer than had
I just stopped – although had I added the –Graceful option to the Stop-CsWindowsService command it would
have done the same. I am in the opinion that if we are patching we have a
maintenance window, so the sooner the services are down and we patch the
better. Once patched the Invoke-CsFailback
was used and bring everything back (including the starting of services) and we
So – lessons learned…on a 3-node pool I would not use the CsComputerFailover command, I would simply stop the services, patch, and restart.
Update - thanks Korbyn
As a side – there is a single database update in this release - the QoeMetrics database was updated. Make sure you run the Install-CsDatabase command to update this followed by Test-CsDatabase -ConfiguredDatabases -SqlServerFqdn <FQDN> | ft databasen*,Expe*,Inst*,Suc* -AutoSize and Test-CsDatabase -CentralManagementDatabase -SqlServerFqdn <FQDN> | ft databasen*,Expe*,Inst*,Suc* -AutoSize and ensure your database numbers match.