Skype for Business – Move-CsRgsConfiguration : Object reference not set to an instance of an object.

During a side-by-side Lync 2013 to Skype for Business migration I encountered an error moving Response Groups using Move-CsRgsConfiguration. Move-CsRgsConfiguration -Source lyncfepool.domain.local -Destination skypefepool.domain.local This resulted in the error “Move-CsRgsConfiguration : Object reference not set to an instance of an object.”. To resolve I ran Move-CsRgsConfiguration again with the -verbose switch: Move-CsRgsConfiguration -Source lyncfepool.domain.local -Destination skypefepool.domain.local -verbose Verbose output below: VERBOSE: Performing the operation "Move-CsRgsConfiguration" on target "service:ApplicationServer:skypefepool.domain.local/531286fe-e965-4c1c-9949-26eca4d8d3db". VERBOSE: Handle audio files... VERBOSE: Update associations with holiday sets... VERBOSE: Update associations with managers... Move-CsRgsConfiguration : Object reference not set to an instance of an object. At line:1 char:1 + Move-CsRgsConfiguration -Source lyncfepool.domain.local -Destination skyp ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Microsoft.Rtc.R...lRgsDataContext:TransactionalRgsDataContext) [Move-CsRgsC onfiguration], NullReferenceException + FullyQualifiedErrorId : Microsoft.Rtc.Rgs.Management.MoveCsRgsConfigurationCmdlet VERBOSE: Rollback transaction. ...

3 July 2017 · 1 min · Chris Hayward

Skype for Business – Can I have Voicemail if I use Lotus Notes?

The short answer is no, you require Exchange Unified Messaging, whether that is provided by Exchange 2010 SP3, 2013 2016 or Exchange Online. But, what about if you deploy an Exchange server just to service Voicemail and forward the Voicemail on as an attachment to Lotus Notes, or any other email platform for that matter? *NOTE - You will need to license any users that have an Exchange Mailbox & UM.* ...

9 January 2017 · 4 min · Chris Hayward

Skype for Business – Resource Forest and Surface Hub sign-in

We recently came across an issue where a customer could not sign-in to a Microsoft Surface Hub. There’s a great article here: https://ucsorted.com/2015/08/31/understanding-user-mapping-in-a-skype-for-business-resource-forest/ explaining how a Resource Forest model works. When you enable a SfB user, the proxyAddresses attribute is populated with the users SIP address in the format SIP:name@domain.com. In a Resource Forest model this is populated on the disabled user object in the Resource Forest. Usually the attribute flow is one way from the User Forest to the Resource Forest so the SIP: value never populates the proxyAddresses attribute in the User Forest. ...

4 November 2016 · 1 min · Chris Hayward

Skype for Business – Office Online Server ISO Download

Microsoft recently released Office Online Server to replace Office Web Apps. OOS allows you to use Word, Excel, PowerPoint and OneNote from your browser. Lync and Skype for Business utilise OOS for enhanced PowerPoint sharing. All Microsoft articles advise to download Office Online Server from the Volume Licensing Service Center, however it’s quite difficult to find. Try searching for “Office”, “Office Online”, “Online” and you won’t find an “Office Online Server” download. That’s because it’s actually part of Office Professional Plus 2016. ...

14 June 2016 · 1 min · Chris Hayward

Skype for Business – Hide Response Group from Address Book

Back in 2012 I wrote a post on how to hide Response Groups from the Address Book in Lync 2010 using ADSI Edit. The same process also applied to Lync 2013. Original Article: /2012/10/16/hiding-response-groups-from-address-book-lync-server-2010/ The original article involved finding the Response Group AD Object manually using ADSI Edit and changing the msExchHideFromAddressLists (Exchange property) to TRUE. You could then run Update-CSAddressbook and Lync clients would pickup the change within due course. ...

15 April 2016 · 1 min · Chris Hayward

Lync 2013 – TLS Negotiation took too long to complete

I recently came across an issue with Lync 2013 where SCOM (System Center Operations Manager) was periodically reporting errors with the Conferencing Attendant and IM MCU. The SCOM errors were as follows: Alert: [LYNC] Conferencing Attendant failed to join the conference. Source: LS Conferencing Auto Attendant Component [F05.DOMAIN.LOCAL] Path: FE05.DOMAIN.LOCAL Last modified by: System Last modified time: 4/11/2016 11:01:50 AM Alert description: Conferencing Attendant failed to join the conference. Microsoft.Rtc.Signaling.ConnectionFailureException:Operation failed because the network connection was not available. ---> Microsoft.Rtc.Internal.Sip.TLSException: TLS Negotiation took too long to complete Alert: [LYNC] Lync Server IM MCU failed to connect to the SIP Front End. Source: LS Instant Message Conferencing Component [FE03.DOMAIN.LOCAL] Path: FE03.DOMAIN.LOCAL Last modified by: System Last modified time: 4/11/2016 11:35:24 AM Alert description: Lync Server IM MCU failed to connect to the SIP Front End. Local Machine name: FE03.DOMAIN.LOCAL FE hostname: FE06.DOMAIN.LOCAL IP address: 10.10.10.13:5061 Message: TLS Negotiation took too long to complete Strangely, no users had reported issues and initial thoughts were performance problems with the Lync Front End servers. This is quite a large Pool with 7 Front Ends and each Front End would periodically generate the above errors in SCOM. All servers were running the latest CU and all certificates were valid for 2 years. ...

13 April 2016 · 4 min · Chris Hayward

Skype for Business – Get QoS Configuration with PowerShell

When configuring QoS (Quality of Service) in Microsoft Lync / Skype for Business you need to modify the media port ranges for various Services and Configuration using PowerShell. Pat Richard has made a brilliant QoS calculator for Lync/Skype for Business here http://www.ehloworld.com/2821. The calculator will provide you with the PowerShell commands required to configure QoS port ranges and the GPO’s. The calculator also gives you the commands to verify the Configuration (which this post is based on). ...

26 January 2016 · 3 min · Chris Hayward

Skype for Business 2015 – Edge Servers not discovered by SCOM SfB Management Pack

I recently came across an issue where the SCOM (System Center Operations Manager) Agent was installed on all servers in a customers Skype for Business (SfB) Edge pool but they were not appearing in the SfB Management Pack (Skype for Business 2015 Server Health). All Edge servers were showing as “Agent Managed” in SCOM and appeared in “Discovered Inventory” as Critical. Using Health Explorer on each Edge server showed the following: ...

10 December 2015 · 3 min · Chris Hayward

Skype for Business 2015 – Automated Backup Script

A few years ago I created a Lync 2013 backup script that would backup data from all servers in the Topology. Lync 2013 Automated Backup Script This script also works with Skype for Business 2015 but it specifically backed up Response Group and User data by identifying the pool version. The script below has been updated and tested on SfB 2015. <# Author: Chris Hayward, chrishayward.co.uk Purpose: Centralised script to backup Lync 2013 and SfB 2015 Version: 1.2 Changes: DATE - Change 06/11/2013 - Release 1.1 - Fixed code that deletes old backup directories (CH) 27/11/2015 - 1.2 Updated for Skype for Business (version -gt 7 rather than -eq 6) #> Import-Module Lync # Script Config $BackupPath = "D:\_Backup\" # Backup Path $BackupRetention = -14 # Number of days to keep old backups (Requires a "-", e.g. two weeks would be -14, 5 days would be -5) # *** Start of script *** # Delete old backup directories Get-ChildItem $BackupPath |? {$_.psiscontainer -and $_.lastwritetime -le (get-date).adddays($BackupRetention)} |% {remove-item $_.FullName -recurse -force} # Get date in day-month-year format and set backup path $DateStamp = Get-Date -Format dd-MM-yy $BackupPath = $BackupPath + "LyncBackup_" + $DateStamp +"\" New-Item $BackupPath -type directory -force # Backup the Lync Central Management Store $CMSBackupFile = $BackupPath + "Lync-CMS-Config.zip" Export-CsConfiguration -FileName $CMSBackupFile # Backup Location Information Service data $LISBackupFile = $BackupPath + "Lync-LIS-Config.zip" Export-CsLisConfiguration -FileName $LISBackupFile # Backup User Data (Lync 2013 & SfB 2015 servers only) $UserServer = Get-CsService -UserServer | Where-Object {$_.version -ge 6} ForEach ($Service in $UserServer) { $UserDataBackupFile = $BackupPath + "Lync-User-Config_" + $($Service.PoolFqdn) + ".zip" Export-CsUserData -PoolFQDN $($Service.PoolFqdn) -FileName $UserDataBackupFile } # Backup Response Group Configuration (Lync 2013 & SfB 2015 servers only) $ApplicationServer = Get-CsService -ApplicationServer | Where-Object {$_.version -ge 6} ForEach ($Service in $ApplicationServer) { $RGSBackupFile = $BackupPath + "Lync-RGS-Config_" + $($Service.PoolFqdn) + ".zip" Export-CsRgsConfiguration -Source ApplicationServer:$($Service.PoolFqdn) -FileName $RGSBackupFile } # Backup Voice Configuration $BackupPath = $BackupPath + "Lync-Voice-Config\" New-Item $BackupPath -type directory -force Get-CsDialPlan | Export-Clixml -path $BackupPath\DialPlan.xml Get-CsVoicePolicy | Export-Clixml -path $BackupPath\VoicePolicy.xml Get-CsVoiceRoute | Export-Clixml -path $BackupPath\VoiceRoute.xml Get-CsPstnUsage | Export-Clixml -path $BackupPath\PSTNUsage.xml Get-CsVoiceConfiguration | Export-Clixml -path $BackupPath\VoiceConfiguration.xml Get-CsTrunkConfiguration | Export-Clixml -path $BackupPath\TrunkConfiguration.xml To run the script as a scheduled task: ...

27 November 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