I was recently installing the latest Skype4B CU and came across a strange issue where one of the updates would not install. The error message I received was:
“Skype for Business Server 2015 Update Installer: There were errors during the installation process. For details, see the log file atC:\Users\chris\AppData\Local\Temp\Skype_patchinstallerlog-FE01-[2016-08-01][15-28-31].txt”
Checking the log files indicated an error 1603. A bit of googling led me to various blog posts advising to ensure all MMCs were closed, checking there was enough disk space on the Front End and also running the Deployment Wizard again. None of these solutions worked for me, I tried running the installer from an elevated prompt and also tried installing server.msp manually.
[01/08/2016 15:05:54] Executing command: msiexec.exe /update “C:\Users\chris\AppData\Local\Temp\Server.msp” /passive /norestart /l*vx “C:\Users\chris\AppData\Local\Temp\Server.msp-FE01-[2016-08-01][15-05-54]_log.txt”
[01/08/2016 15:06:22] ERROR 1603: Server.msp had errors installing.
[01/08/2016 15:07:12] ERROR: SkypeServerUpdateInstaller failed to successfully install all patches
MSI (c) (0C:44) [15:06:22:801]: MainEngineThread is returning 1603
powershell -noprofile -command ” & Install-CsDatabase -Update -DatabaseType Registrar -Verbose ”
& : The term ‘Install-CsDatabase’ is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:1 char:4
+ & Install-CsDatabase -Update -DatabaseType Registrar -Verbose
+ CategoryInfo : ObjectNotFound: (Install-CsDatabase:String) ,
+ FullyQualifiedErrorId : CommandNotFoundException
LCSSetup_Commands.log gave the biggest clue, server.msp was running an “Install-CsDatabase” PowerShell command and an error was returned stating the term “Install-CsDatabase” is not recognized as the name of a cmdlet. When I tested a SfB command from the Skype for Business Management Shell it worked 100% fine. When I tested the command from a Windows PowerShell prompt it failed. Note PowerShell V3 should automatically load modules so I wasn’t 100% sure why this wasn’t working. If I ran “Import-Module Lync”, then the SfB cmdlets all worked fine. I then tried running the update installer from a SfB Management Shell (as this worked) and also tried creating a PowerShell profile in System32\WindowsPowerShell to automatically load the Lync module when you open PowerShell.exe. Although this worked for my user, the update still failed!
Here you can see Get-CsWindowsService failing in a normal Windows PowerShell session, what was interesting was tabbing this command worked fine so PS was picking up the SfB module cmdlets:
Here I ran $env:psmodulepath –split “;” to list all directories PowerShell will automatically import modules from (As you can see Skype for Business is there):
Here I opened WPS and ran “Get-Module”, it is normal to only see the one Manifest until you run a command, WPS v3 will then Import the relevant module automatically. I then ran Get-CsWindowsService again, and ran “Get-Module” after it failed.
Bingo, why has Get-CsWindowsService triggered WPS to try and load a SFBTrial module rather than the correct Skype for Business module? SFBTrial is a custom PowerShell module we wrote. It’s actually pretty neat, before a customer purchases Skype for Business we utilise this environment as a trial/demo platform. The SFBTrial module takes care of Creating test users, OUs, Address Book segregation and also disabling accounts after the trial period. However, it seems to be causing me a bit of bother installing updates!
I removed the “SFBTrial” custom Module from C:\Windows\System32\WindowsPowerShell\v1.0\Modules.
After this module was removed, below you can see Get-CsWindowsService automatically loading the Skype for Business Module.
Re-running the Skype for Business Update Installer was now successful.