Lync 2013 won’t change to Skype4B when deployed using OCT

We found out that there is a scenario where the icon isn’t changed to Skype for Business after the April 2015 update.

skype4bicon01

The Start Menu shortcut was also Lync 2013:

skype4bicon02

While troubleshooting the issue, we discovered that the C:\Windows\Installer\{91150000-0011-0000-1000-0000000FF1CE}\ folder contained two different files with Lync and Skype4B icons:

skype4bicon03

After testing it, we discovered that the root cause for this issue was due to Lync 2013 being installed with a customized shortcut using Office Customization Tool (OCT):

skype4bicon04

There are 3 known workarounds, the first two will require redeploy but they are permanent. The last workaround is temporary and an update or repair will revert the changes made by the script.

1) Redeploy Office 2013 using OCT

If we don’t change the shortcut location in OCT, we will only get the lyncicon.exe in the Windows Installer folder. Also, this issue happens with Office 2013 and Lync 2013 Standalone.

2) Redeploy Office 2013 using config.xml

A good alternative to OCT is to use a config.xml in order to customize the installation, but with this method, however, we cannot change the shortcut location:

Config.xml file reference for Office 2013
https://technet.microsoft.com/en-us/library/cc179195.aspx

3) Run a script after every update

The final workaround is to use a script after every client update that will change the icons files. As an example here are the PowerShell cmdlets (requires elevated permissions) to change the icon and description:

$shortcutLocation = “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Office 2013\”
$oldShortcut = “Lync 2013.lnk”
$newShortcut = “Skype for Business 2015.lnk”
$iconComment = “Connect with people everywhere through voice and video calls, Skype Meetings, and IM.”

# Create a copy of the Shortcut:
Rename-Item $shortcutLocation$oldShortcut $newShortcut

# Change the new shortcut settings
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutLocation+$newShortcut)
$shortcut.Description = $iconcomment
$shortcut.Save()

#Get the Icon Name and Folder
$iconlocation = $shortcut.IconLocation
$tempInd = $iconlocation.indexof(“Icon”)

$iconName = $iconlocation.substring($tempInd,$iconlocation.indexof(“.exe”)-$tempInd )
$iconFolder = $iconlocation.substring(0,$tempInd)

#Change the icon:
Rename-Item $iconFolder$iconName”.exe” $iconFolder$iconName”_old.exe”
Copy-Item  $iconFolder”lyncicon.exe” $iconFolder$iconName”.exe”  -force

skype4bicon05

Now we have the Skype for Business 2015 icon:

skype4bicon06

And also the Skype for Business 2015 shortcut in the Start Menu:

skype4bicon07

Changing back to Lync 2013 Icon after the April 2015 update

Some of us were surprised by the Lync 2013/Skype for Business Client update, since this security update also included the Skype4B User Interface. Lync/Skype4B administrators could still use the recently added EnableSkypeUI setting to the Client Policy in order to manage which UI they want the user to see.

In our Lync Lab, we have it configured to False and the user is able to see the Lync 2013 UI. The icon, however, is still Skype for Business:

lyncicon01

As this can cause confusion in some users, the purpose of this article is to show a workaround to this. Keep in mind that future client updates will change the icon again.

In the Start Menu, we had this:

lyncicon02

The folder location is “%ProgramData%\Microsoft\Windows\Start Menu\Programs\Microsoft Office 2013”.

lyncicon03

Note: In our lab, the folder is C:\Windows\Installer\{90150000-0011-0000-0000-0000000FF1CE}, and we can check were the file is with this:

Get-ChildItem -Path C:\Windows\Installer -Filter lyncicon.exe -Recurse

lyncicon04

We need to get the icon before the update and copy it with the name lyncoldicon.exe to the same folder. Although we can copy it to another folder, it’s preferable to keep all icons in the same location:

lyncicon05

It’s a good practice to keep both icons because we may want to change back to Skype for Business icon.

In a PowerShell window with elevated permissions, we run the following cmdlets:

$shortcutLocation = “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office 2013\”
$newShortcut = “Lync 2013.lnk”
$oldShortcut = “Skype for Business 2015.lnk”
$iconLocation = “C:\Windows\Installer\{90150000-0011-0000-0000-0000000FF1CE}\”
$iconComment = “Connect with people everywhere through voice and video calls, Lync Meetings, and IM.”

#Change the icon:
Rename-Item $iconLocation”lyncicon.exe” $iconLocation”skypeicon.exe”
Rename-Item  $iconLocation”lyncoldicon.exe” $iconLocation”lyncicon.exe” -force

# Create a copy of the Shortcut:
Rename-Item $shortcutLocation$oldShortcut $newShortcut

# Change the new shortcut settings
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutLocation+$newShortcut)
$shortcut.Description = $iconcomment
$shortcut.Save()

lyncicon06a

Note: All scripts should be extensively tested before being applied in a production environment.

After running the cmdlets, the Start Menu should change to this:

lyncicon07

And after a reboot the icon will also change in the TaskBar:

lyncicon08

To rollback the changes:

$shortcutLocation = “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office 2013\”
$oldShortcut = “Lync 2013.lnk”
$newShortcut = “Skype for Business 2015.lnk”
$iconLocation = “C:\Windows\Installer\{90150000-0011-0000-0000-0000000FF1CE}\”
$iconComment = “Connect with people everywhere through voice and video calls, Skype Meetings, and IM.”

#Change the icon:
Rename-Item $iconLocation”lyncicon.exe” $iconLocation”lyncoldicon.exe”
Rename-Item  $iconLocation”skypeicon.exe” $iconLocation”lyncicon.exe” -force

# Create a copy of the Shortcut:
Rename-Item $shortcutLocation$oldShortcut $newShortcut

# Change the new shortcut settings
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutLocation+$newShortcut)
$shortcut.Description = $iconcomment
$shortcut.Save()

lyncicon09a

CPU (Socket/No. of Core) Considerations in Lync Server 2013/Skype for Business Server 2015

Update 2017/05/29 – Added Skype for Business Server 2015 and SQL Server 2014 reference.

The hardware requirements in Lync Server 2013/Skype for Business Server 2015 have increased since the previous version, which makes sense since now Audio/Video Conferencing, Monitoring and Archiving roles can be collocated in the Front End. As a result, more CPU and RAM are required to make Lync Server 2013/Skype for Business Server 2015 work properly.

When we deploy a Standard Edition Front End we will have 3 local SQL Server database instances running; on the contrary, the Enterprise Edition Front End will have 2 SQL Server instances. These instances are SQL Express and now it gets tricky, especially if we have a virtual machine host with 4 physical CPUs and we create a new virtual machine with 4 Cores, assigning each Core to a different Socket (physical CPU) available.

Lync/SfB Server services will use all available Cores independently if they are on the same Socket or note, but there is a catch — SQL Express license only allows the instances to use one Socket. Thus, if we have each Core on separated Sockets, all SQL Express instances will only use one Core, and in larger deployments this can cause client disconnect issues, conferences failing and overall user experience degradation.

In Windows Server 2012/2012R2/2016, we can use Task Manager to check how many Sockets and Cores are assigned to the server:

windows2012-taskmonitor

In the previous image we can see that this Virtual Machine is running on one Socket and has two Cores.

On Windows Server 2008 R2 we can use the following PowerShell cmlet:

gwmi Win32_ComputerSystem | select NumberOfProcessors, NumberOfLogicalProcessors | fl

Windows2008R2-PowerShellCPUInfo

Where NumberOfProcessors corresponds to the number of Sockets (physical CPUs) and NumberOfLogicalProcessors is the number of CPU Cores.

Conclusion

We must carefully prepare/plan a Lync Serve 2013/Skype for Business deployment. If we have a Standard Edition Front End, we need to make sure that it has 4 CPU Cores assigned on the same Socket. On Enterprise Edition Front End the same applies but keep in mind that, if we have 4 Front End‘s, we should not assign the same Socket to all CPU Cores.

The SQL Express limitation is 1 Socket or 4 Cores. For additional details please check:

Features Supported by the Editions of SQL Server 2012

Features Supported by the Editions of SQL Server 2014