Microsoft Teams – Handle unassigned numbers with Direct Routing

History Unlike Lync & Skype for Business, Teams doesn’t have a method to handle unassigned numbers (yet). There is a UserVoice post here requesting the feature: https://microsoftteams.uservoice.com/forums/555103-public/suggestions/38673550-unassigned-number-range Typically the unassigned numbers feature was used to program ALL available number ranges in the system. A number was deemed “unassigned” if it was not populated as a LineURI against an SfB Object (i.e. User, Response Group, Application Endpoint etc). If an unassigned number received a call you had two options: ...

5 August 2021 · 4 min · Chris Hayward

Teams – Enable users for Direct Routing PowerShell GUI

Enable-TeamsDRUsers GUI At the time of writing it’s not possible to enable Teams Direct Routing users via Teams Admin Center, only via PowerShell commands. This PowerShell script launches a WinForms GUI that can be used by anyone. This is useful for enabling or making changes to a couple of Teams DR users. Requirements - Microsoft Teams PowerShell module 2.0 or above - Teams Administrative Rights (Teams Service/Communications Administrator + Skype for Business Administrator) - Users must have a Phone System license ...

22 March 2021 · 2 min · Chris Hayward

How To Install Microsoft Teams on an Amazon Fire Tablet

I am writing this post in January 2021 as all school children in the UK now have to study from home. A friend recently asked me how they can run Microsoft Teams on their kids Amazon Fire Tablet. My immediate thoughts were Teams is not on the Amazon Appstore, Amazon’s browser (Silk) is not supported, just install Firefox or Chrome and problem solved. Well it turns out neither Firefox or Chrome are available on the Amazon app store either! ...

26 January 2021 · 2 min · Chris Hayward

Office 365 – Microsoft Teams The program can't start because MSVCP140.dll is missing

After Microsoft released Microsoft Teams yesterday I tried to install it on my company issued laptop (Windows 8.1 64bit). Upon opening Teams I was greeted with the following error: “The program can’t start because MSVCP140.dll is missing from your computer. Try reinstalling the program to fix this problem” The fix was to install the Microsoft Visual C++ Redistributable for Visual Studio 2015 available here: https://www.microsoft.com/en-us/download/details.aspx?id=48145

4 November 2016 · 1 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

How To: Upgrade Office Web Apps 2013 to Office Online Server 2016

On your current farm run “Get-OfficeWebAppsFarm”. Make a note of the InternalURL, ExternalURL, CertificateName and Machines (Note you may only have the ExternalURL configured). E.g. InternalURL: https://webapps.mycompany.local ExternalURL: https://webapps.mycompany.com CertificateName: My WAC Certificate Machines: WebApps01, WebApps02 Run “Get-OfficeWebAppsHost”. Make a note of the allowList. E.g. allowList: mycompany.com, mycompany.local On each Office Web Apps 2013 server: Uninstall “Microsoft Office Web Apps Server 2013” Install Windows Identity Foundation 3.5 (Add Roles and Features > Features) Install the Update for Universal C Runtime in Windows KB (https://support.microsoft.com/en-gb/kb/2999226) Install Microsoft Office Online Server 2016 Using the information you gathered from Get-OfficeWebAppsFarm, on the first machine in the farm (WebApps01) run New-OfficeWebAppsFarm, E.g. New-OfficeWebAppsFarm -InternalURL https://webapps.mycompany.local -ExternalURL https://webapps.mycompany.com -CertificateName “My WAC Certificate” ...

17 June 2016 · 1 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

Windows Server 2012 R2 – Add cluster node / Cluster Service "Keyset does not exist"

I recently came across an error where the Cluster Service stopped on a Windows Server 2012 R2 failover cluster and would not start. Event Logs generated were: Event ID: 7024 The Cluster Service service terminated with the following service-specific error: Keyset does not exist Event ID: 7031 The Cluster Service service terminated unexpectedly. It has done this 282 time(s). The following corrective action will be taken in 60000 milliseconds: Restart the service. ...

2 July 2015 · 2 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