Skype for Business – Director Pool in DMZ (Secure Environment)

I was recently working for a customer where their security policy prohibited traffic from the internet terminating on servers within the LAN. Skype for Business (Including previous versions Lync and OCS) uses a Reverse Proxy to terminate web requests within the DMZ and re-write the requests to the Front End Pool(s) within the LAN. The request is received on TCP/443 (HTTPS) and sent to the Front End VIP on TCP/4443. In the case of Standard Edition servers the request would be direct rather than to the Hardware Load Balancer. See diagram below: ...

18 December 2015 · 3 min · Chris Hayward

Skype for Business 2015 – Enable User "Active Directory operation failed"

When enabling users for Skype for Business you may encounter the following error: “Active Directory operation failed on “Domain Controller”. You cannot retry this operation: “Insufficient access rights to perform the operation” I first blogged about this in 2011 for Microsoft Lync 2010 when moving users from an OCS 2007 R2 to Lync 2010 pool: /2011/03/28/lync-2010-move-user-1-errors-failed-while-updating-destination-pool/ This problem can occur when: Enabling a user Moving a user between pools Changing any of the users Skype for Business properties, including policies You verify that your administrative account is a member of CsAdministrator and you may also be a member of RTCUniversalServerAdmins and Domain Admins. ...

17 December 2015 · 2 min · Chris Hayward

Skype for Business – Failed to execute a stored procedure on the back-end

I recently ran an “In-Place” upgrade from Lync 2013 to Skype for Business 2015 on a 3 node Enterprise Front End pool. After the upgrade all 3 Front Ends were logging the following error every 10-15 minutes. Log Name: Lync Server Source: LS Data Collection Date: 20/11/2015 16:40:38 Event ID: 56407 Task Category: (2271) Level: Error Keywords: Classic User: N/A Computer: LYNCFE00V.domain.local Description: Failed to execute a stored procedure on the back-end. Component: QoE Adaptor Stored Procedure: QoeInsertSessionReport2 Error: System.Data.SqlClient.SqlException (0x80131904): Trying to pass a table-valued parameter with 109 column(s) where the corresponding user-defined table type requires 101 column(s). at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.Rtc.Common.Data.DBCore.Execute(SprocContext sprocContext, SqlConnection sqlConnection, SqlTransaction sqlTransaction) ClientConnectionId:35301abd-a45b-4593-a2e4-5faf4257097d Error Number:500,State:1,Class:16 Cause: Configuration issues, an unreachable back-end or an unexpected condition has resulted in the error. Resolution: Verify the back-end is up and this Skype for Business Server has connectivity to it. If the problem persists, notify your organization's support team with the relevant details. Event Xml: <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="LS Data Collection" /> <EventID Qualifiers="51423">56407</EventID> <Level>2</Level> <Task>2271</Task> <Keywords>0x80000000000000</Keywords> <TimeCreated SystemTime="2015-11-20T16:40:38.000000000Z" /> <EventRecordID>49880</EventRecordID> <Channel>Lync Server</Channel> <Computer>LYNCFE00V.domain.local</Computer> <Security /> </System> <EventData> <Data>QoE Adaptor</Data> <Data>QoeInsertSessionReport2</Data> <Data>System.Data.SqlClient.SqlException (0x80131904): Trying to pass a table-valued parameter with 109 column(s) where the corresponding user-defined table type requires 101 column(s). at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean&amp; dataReady) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task&amp; task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task&amp; task, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Microsoft.Rtc.Common.Data.DBCore.Execute(SprocContext sprocContext, SqlConnection sqlConnection, SqlTransaction sqlTransaction) ClientConnectionId:35301abd-a45b-4593-a2e4-5faf4257097d Error Number:500,State:1,Class:16</Data> </EventData> </Event> I gathered something was wrong with the QOEMetrics database due to “Component QOE Adaptor”. I ran the following PowerShell command to test the databases on my SQL Backend: ...

20 November 2015 · 3 min · Chris Hayward

Skype for Business (Lync) – Easiest way to add trusted root certificate authorities to Edge

Ok here is a little tip when trying to add trusted root certificate authorities to Skype for Business 2015 and Lync 2010/2013 Edge servers. Microsoft have a list of Unified Communications Certificate Providers detailed here: https://support.microsoft.com/en-us/kb/929395 Windows now automatically downloads Trusted Root certificates when you access a web page on HTTPS. We can exploit this to get all Trusted Root certificates on our Edge servers which is required for Federation to work correctly. An example of this is where you only get one way IM or a federated partner may see your presence as unknown. ...

17 September 2015 · 2 min · Chris Hayward

Lync – Unable to sign in via Edge (Checkpoint Firewalls)

I recently ran into a problem with Checkpoint Firewalls on a Lync 2010 deployment. The customer already had a single 2010 Front End and wished to enable external sign in over the internet as it did not work over their VPN solution (Direct Access). I installed the Edge server and Reverse Proxy but then encountered a strange issue where I was unable to sign in over the Edge server. Some of the troubleshooting steps I took (Thinking it was my fault): ...

24 March 2015 · 3 min · Chris Hayward

Lync – UK +44 (0) Company_Phone_Number_Normalization_Rules.txt

A common problem in the UK is that companies Active Directory telephone numbers will be populated in the format: +44 (0) 123 456 7891 or +44(0)1234567891 If you were to dial these numbers in the UK you would omit the +44 and just dial the 0. If you are abroad you would dial +44 and omit the 0 (E164 format). As part of the default Lync normalization rules it will remove all spaces and brackets (). When using Lync click to call from a users contact card this normalizes the number to +4401234567891 which is invalid. Therefore you need to either correct all numbers in AD to E164 format or add a normalization rule to the Company_Phone_Number_Normalization_Rules.txt file on your Lync File Share. This is already well documented here: ...

18 November 2014 · 1 min · Chris Hayward

Lync 2013 – Import-CsUserData Error

The scenario is a migration from Lync 2010 to Lync 2013 in a new Active Directory forest and want to migrate users buddy lists. You run DBIMPEXP.EXE on the Lync 2010 environment to export the user data to XML. On the 2013 system you convert the XML to Lync 2013 format then run Import-CsUserData. Convert-CsUserData -inputfile C:temp2010UserData.xml -outputfile C:temp2013UserData_Converted.zip -targetversion Current Import-CsUserData -PoolFqdn "fpool01.domain.local" -FileName "C:temp2013UserData_Converted.zip" When running Import-CsUserData you get the error: PS C:Usersusername> Import-CsUserData -PoolFqdn "fpool01.domain.local" -FileName "C:temp2013UserData_Converted.zip" Import-CsUserData : '@' is an unexpected token. The expected token is ';'. Line 1364, position 39. At line:1 char:1 + Import-CsUserData -PoolFqdn "fpool01.domain.local" -FileName "C:temp2 ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (C:Usersuserna...mpExpImport.Zip:String) [Import-CsUserData], XmlException + FullyQualifiedErrorId : ExportFailure.IO,Microsoft.Rtc.Management.BlobStore.ImportOcsUserStoreDataCmdlet If you look at line 1364 you will notice that the users SIP address has an “&” (amersand). To fix I removed the users entry from the XML (All lines from <app:DocItem Name= to line </app:DocItem>) and zipped the files again. The import then ran successfully.

9 November 2014 · 1 min · Chris Hayward

Review: Kuando Busylight UC for Microsoft Lync

http://busylight.com/ I recently received a Busylight to test from Kuando. Inside the box you receive a Busylight USB device, a sticky pad to attach the device to your desk or screen and some brief instructions. The Busylight itself is constructed from black plastic base with an aluminium main body. Installation is very simple, download and install the software from the Busylight website: http://www.busylight.com/support/lync Busylight runs in the system tray and starts at system startup. You can right click on the Busylight icon in the system tray to access menu features. You can change the speaker volume and make changes to the colours Busylight flashes. It’s worth noting that you can also fully customise the colours using registry settings. ...

20 June 2014 · 3 min · Chris Hayward