Jan 24

Control Permitted Calls via Dial Plans

It is generally believed that you can control numbers users are permitted to call only by limiting the permitted numbers in the Route. If you want to only permit local numbers to be dialed for a user, you create a route that only permits local numbers, then assign that route to a PSTN Usage and a Voice Policy. You then assign that Voice Policy to a user and they can now only call local numbers.

However, you can accomplish the same thing by using Dial Plans. If a user dials a number that is not able to be normalized, the Skype for Business client will drop that call before it ever gets to the Route.

Below is a video demonstrating how the Dial Plan prevents calls from happening. In the video, I create a new Dial Plan and Route. The Route retains the default “permit all” regular Expression of .* yet calls are still dropped because the Dial Plan prevents calls from being placed.

I do not recommend using Dial Plans to limit the range of numbers that users dial. Instead you should continue using Routes.


Routes offer more flexibility in that they can be used in multiple PSTN Usages in order to accomplish things such as Least Cost Routing.

Also, you can update a route and have it replicated throughout your environment in about 5 minutes. While it also takes about 5 minutes to replicate an updated Dial Plan, it won’t take effect until users restart their client. That could take days or weeks for some users. (Or you could migrate all of your users to a different pool and migrate them back. That will forces re-signing in.)

And as soder pointed out in the comments, a clever user could just place a call by manually adding a “+” before their dialed number. Any call submitted with a “+” skips the Dial Plan if that call comes in via a non-Lync/Skype for Business client (as Mickael B pointed out in the comments though my clarification here is still a bit dodgy). If the backend route is the default .*, then that user could place any call he wanted regardless of what the Dial Plan is limited to.

Jan 06

Finding Unused PSTN Usages

I’m working on a little project to remove unused policies, dial plans, etc. frorm our Lync 2013 configuration. It’s all fairly straightforward to find policies with no users assigned to them. But PSTN Usages? Not so easy.

PSTN Usages are a bit of a weird construct in the Lync/Skype for Business world. Forget that many people have difficulty conceptualizing what they even do. Of concern here is that all PSTN Usages get wrapped up into one global object.

When you run Get-CsPstnUsage, you get the terse output seen below.

PS C:\Users\flinchbot> get-cspstnusage

Identity : Global Usage : {Nashville-National, Nashville-International, Indianapolis-National, Indianapolis-International…}

You can get more detail on the defined usages if you run something like this:

PS C:\Users\flinchbot> (Get-CsPstnUsage).usage

This will give you the list of all of your defined PSTN Usages. But how can you tell if any of these are in use?

In order to find out if all of these are in use or not, I hacked together the below script. It grabs the list of usages then brute-force sees if that usage is defined in either a Voice Policy, a Voice Route, or in a Trunk Configuration. If it matches  any of these, then it is assumed that the PSTN Usage is in use. If it does not appear in any of the three, then the usage name is printed.

$PstnUsages = Get-CsPstnUsage
Foreach ($Usage in $PstnUsages.Usage)
    $vp = Get-CsVoicePolicy | ?{$_.PSTNUsages -contains $Usage}
    $vr = Get-CsVoiceRoute | ?{$_.PSTNUsages -contains $Usage}
    $tc = Get-CsTrunkConfiguration | ?{$_.PSTNUsages -contains $Usage} 
    If (!$vp -and !$vr -and !$tc) 
        write-host $usage 

For a one-liner you can use to find all voice policies that do not have a PSTN Usage defined, you can use this:

get-csvoicepolicy | ? {$_.PstnUsages.count -lt 1} | select identity,pstnusages

Dec 08

Speed Up your RGS Agents Sign In With EnableCrossSiteSignIn

12-4-11-call-centerIf you are using formal response groups, then each of your agents needs to go to a web page and sign in to make themselves available for that response group. For small and midsize organizations this is probably a pretty quick activity.

However, if you have a very large or very complex environment, it could take a very long time for this web page to open. The reason for this is that Lync/Skype for Business supports "cross-site sign-in". This means that an agent from Site A can sign in to a Response Group in Site B. However for this to work, the initial sign in web page needs to inventory all of the Response Groups in your whole organization. If you have a bucket load of RGS, this could take a very long time.

Snuck in to the latest Lync Cumulative Update (and probably the latest Skype for Business update but I can't verify it yet) is a configuration setting to prevent cross-site sign in. With this value set, all agents in a given site can only log in to Response Groups in that site.

This is a per-site setting and is enabled for all response groups in the site where this is set.

So if you want to disable cross site sign in for a site, how do you do it?

You need to edit the web config file for the internal and external websites for a given site. By default, that file is found in these two locations:

C:\Program Files\Microsoft Lync Server 2013\Web Components\Rgs\Clients\Ext\Web.config
C:\Program Files\Microsoft Lync Server 2013\Web Components\Rgs\Clients\Int\Web.config

(It's in the same path in Skype for Business, just replace "Microsoft Lync Server 2013" with "Skype for Business Server 2015")

Make a backup of the web.config file in case you screw something up.

Next, add the following snippet into the web.config file after the 'configSections' element. If you insert it before 'configSections', the Agent Tab page will always return 500 Internal Error.

                             <add key="EnableCrossSiteSignIn" value="False"/>

Here is a screen shot showing a properly configured web.config file.


For good measure, go ahead and restart the "World Wide Web Publishing Service" after saving this change.

Also remember that you will need to do this on every Front End server individually for both the internal and external directories.

Nov 13

Take me to Your Leader and PinAuthType

06305827_take_me_to_your_leader_design_xlargeNew to Skype for Business Server is the PinAuthType setting. This is set via either the New-CsDialInConferencingConfiguration cmdlet or the Set-CsDialInConferencingConfiguration cmdlet.

PinAuthType can be set to two values:

  • "OrganizerOnly" – The system will no longer prompt the users to enter a leader PIN if an authenticated user has already activated the meeting.
  • "Everyone" – The system will prompt the users to enter a leader PIN even if an authenticated user has already activated the meeting.

A Skype for Business meeting does not become active until an authenticated user joins the meeting. Until an authenticated user joins, callers sit in limbo – which isn’t necessarily the Lobby if bypass the lobby is enabled for PSTN callers. This is to prevent external users from just dialing in to a meeting and starting to talk which could help prevent meeting fraud.

An authenticated user is anyone who belongs to your organization and logs in with their Skype for Business/Lync client or someone who dials in and enters their extension and PIN via the phone. In other words, a user who is configured in your Skype for Business environment must join a meeting to activate it. What PinAuthType does is to remove the prompt for leader credentials after one authenticated user has joined the meeting.

To clarify this setting further, consider the following example where "OrganizerOnly" is the PinAuthType.

  • Alice is the first person to join the meeting.  She dials in from her mobile phone and provides the conference ID.  She gets prompted "If you are the leader, please press * now". But since she is not the organizer she just waits on the line.
  • Bob joins next by dialing in.  He enters the Conference ID and then also provides his extension and PIN when prompted.  He is now an authenticated user in the meeting.  As soon as he joins, Alice is admitted into the meeting as well.  Alice and Bob can now talk to each other.
  • Charlie is the last person to join the meeting.  He dials in and provides his Conference ID.  He does not hear the "If you are a leader…" message due to the PinAuthType setting.

Setting PinAuthType to OrganizerOnly enables this feature. Setting PinAuthType to Everyone keeps the default setting where every caller is asked if they are a leader.


Oct 30

Statistics Manager PowerShell Module

While troubleshooting one of my Statistics Manager agents that wouldn't connect to the Statistics Manager service, I was missing PowerShell. I ended up having to manually dig up the config files to ultimately find my error (Missed the port on the Statistics Manager URI).

So I wrote a fairly simple PowerShell Module to help manage a Statistics Manager Agent.

Here are the cmdlets that exist in the module:


  • Lists the current Agent configuration


  • Shows the current encrypted password. Compare this with another working agent to see if you typed in the password wrong during install.


  • Along with the "-ListenerURI" parameter, changes the current ListenerURI. The ListenerURI is the path to the Statistics Manager server, such as https://stats.flinchbot.com:8443/


  • Along with "-Thumbprint" parameter, changes the current thumbprint. This is useful if you change your Statistics Manager certificate or copied the thumbprint wrong while running the install.


  • Restarts the Skype for Business StatsMan PerfAgent. Useful to run after changing the Thumbprint or ListenerURI.

To use this module, copy it somewhere on your server. Be sure that your PowerShell ExecutionPolicy is set to unrestricted as this isn't a signed PowerShell module/script. https://technet.microsoft.com/en-us/library/ee176961.aspx

Open a PowerShell windows as Administrator.

Type the following into the PowerShell window:

Import-Module c:\temp\StatsManager.psm1

(Assuming you copied the module to c:\temp)

At that point it should work fine.

Please leave feedback. Feel free to update it or suggest improvements.

You can download the module by clicking on this link.

I will be updating this soon to support variable paths so that it will run against remote servers. I'v eintended to do that this week but I've been to busy to get that done. I probably won't get to it for a week or so. Therefore I went ahead and released it now.

Oct 08

Mobile Discovery and Authentication Communication Flow

There isn't a lot of detailed documentation about what happens with Lync/Skype for Business mobility during the autodiscover phase. This article will detail how the mobile client eventually gets connected to the correct pool, especially if you have Directors or multiple pools in your environment.

I won't dig into the autodiscover process from the DNS standpoint. Several other articles have been written about that:

  1. Jeff Schertz 1
  2. Jeff Schertz 2
  3. Rune Dyrhaug Stoknes

In a nutshell, the UCWA (mobility) URL is obtained by Lync Mobile client as below
1. Lync 2013 Mobile client sends HTTP GET request to obtain the UCWA URLs
2. Client receives 401 Unauthorized response
3. Client authenticates again with Web Ticket
4. Client receives response with the UCWA URL

In the below example, the mobile client is out on the Internet somewhere. The user testuser@flinchbot.com is trying to login via the mobile client. The testuser@flinchbot.com account is homed on the Lync pool in Europe. 

After performing the DNS lookup, the mobile client is given a URL to a Director Pool in the United States. The Director Pool belongs to a Lync Pool in the US. Therefore, the next steps are the Director forwarding the request to the US pool to assist in finding the users home pool. (If you don't have a Director, this step would be skipped and you would connect directly to the Front End pool in the US.) The US Front End pool determines that the user is homed on a pool in Europe. The client gets redirected to that pool. After an authentication cycle, the client is given the direct public URL to login to the mobility service on the pool in Europe.

Remember that the first step is Autodiscover. This must happen before you actually connect to the Mobility service. This is why the process gets repeated on the Europe Pool. You need to "autodiscover" the URL for the Mobility service in Europe. The below diagram shows how autodiscover and the mobility service work together.

 autodiscover mobility

Below is a Visio diagram showing the detailed negotiation that happens. The diagram is broken in to three sections to help show to which server the mobile client is communicating with in each step.

Further down are log files from a capture of this activity showing the specific details returned during each step of the process.


1. The client constructs the discover URL and sends an HTTP GET request

INFO APPLICATION CUcwaAutoDiscoveryService.cpp/1905:Successfully started the GetUserUrlOperation request for https://lyncdiscover.flinchbot.com/?sipuri=sip:testuser@flinchbot.com

2. The client receives URLs in response to the HTTP GET

INFO TRANSPORT TransportUtilityFunctions.cpp/1116:<ReceivedResponse>
GET https://lyncdiscover.flinchbot.com/?sipuri=sip:testuser@flinchbot.com
Request Id: 0515498C
HttpHeader:Cache-Control no-cache
HttpHeader:Content-Length 1137
HttpHeader:Content-Type application/vnd.microsoft.rtc.autodiscover+xml; v=1
HttpHeader:Date Tue, 18 Aug 2015 20:07:30 GMT
HttpHeader:Expires -1
HttpHeader:Pragma no-cache
HttpHeader:Server Microsoft-IIS/8.0
HttpHeader:StatusCode 200
HttpHeader:X-AspNet-Version 4.0.30319
HttpHeader:X-Content-Type-Options nosniff
HttpHeader:X-MS-Server-Fqdn Lync1.us.flinchbot.com
HttpHeader:X-Powered-By ASP.NET
<?xml version="1.0" encoding="utf-8"?><AutodiscoverResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" AccessLocation="External"><Root><Link token="Domain" href="https://webext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/domain?originalDomain=flinchbot.com" /><Link token="User" href="https://webext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user?originalDomain=flinchbot.com" /><Link token="Self" href="https://webext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=flinchbot.com" /><Link token="OAuth" href="https://webext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=flinchbot.com" /><Link token="External/XFrame" href="https://webext.us.flinchbot.com/Autodiscover/XFrame/XFrame.html" /><Link token="Internal/XFrame" href="https://dirpoolweb.us.flinchbot.com/Autodiscover/XFrame/XFrame.html" /><Link token="XFrame" href="https://dirpoolwebext.us.flinchbot.com/Autodiscover/XFrame/XFrame.html" /></Root></AutodiscoverResponse>

3. The client uses that response to make a request to the discovered external web URL to retrieve the home pool information. 

INFO APPLICATION CUcwaAutoDiscoveryGetUserUrlOperation.cpp/224:UcwaAutoDiscoveryGetUserUrlOperation completed with url = https://lyncdiscover.flinchbot.com/?sipuri=sip:testuser@flinchbot.com, userUrl = https://webext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user?originalDomain=flinchbot.com, status = S0-0-0)

4. The client receives a 401 Unauthorized response with Web Ticket Service location in the header

INFO TRANSPORT TransportUtilityFunctions.cpp/1116:<ReceivedResponse>
GET https://webext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user?originalDomain=flinchbot.com
Request Id: 0507771C
HttpHeader:Cache-Control no-cache
HttpHeader:Content-Length 1293
HttpHeader:Content-Type text/html
HttpHeader:Date Tue, 18 Aug 2015 20:07:30 GMT
HttpHeader:Server Microsoft-IIS/8.0
HttpHeader:StatusCode 401
HttpHeader:Strict-Transport-Security max-age=31536000; includeSubDomains
HttpHeader:X-Content-Type-Options nosniff
HttpHeader:X-MS-Server-Fqdn Lync1.us.flinchbot.com
HttpHeader:X-MS-WebTicketSupported cwt,saml
HttpHeader:X-MS-WebTicketURL https://dirpoolwebext.us.flinchbot.com/WebTicket/WebTicketService.svc
HttpHeader:X-Powered-By ASP.NET
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
<style type="text/css">


5. The client submits a request to the Web Ticket Service to retrieve the metadata exchange document (MEX). The client submits a Request Security Token to Web Ticket Service and supplies credentials.

INFO TRANSPORT CMetaDataManager.cpp/488:Sending Mex request for endpoint (https://dirpoolwebext.us.flinchbot.com/WebTicket/WebTicketService.svc) w/ sign-in name (testuser@flinchbot.com)
INFO TRANSPORT CMetaDataRequest.cpp/90:MEX response received.
2015-08-18 16:07:18.071 Lync[4844:1844] INFO TRANSPORT CWebTicketSession.cpp/564:Received webticket resposne with status S0-0-0)
2015-08-18 16:07:18.076 Lync[4844:1844] INFO TRANSPORT CWebTicketSession.cpp/668:New web ticket obtained

6. The client makes a request again to the https://dirpoolwebext.us.flinchbot.com/Autodiscover/Autodiscover.svc/root/user to retrieve specific user home pool information and provides the web ticket.

INFO TRANSPORT CBindingTransformationFactory.cpp/259:Using endpoint address https://dirpoolwebext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user?originalDomain=flinchbot.com as the server address
INFO TRANSPORT TransportUtilityFunctions.cpp/735:<SentRequest> GET https://dirpoolwebext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user?originalDomain=flinchbot.com Request Id: 0515498C HttpHeader:Accept application/vnd.microsoft.rtc.autodiscover+xml;v=1 HttpHeader:X-MS-WebTicket XXXXXXX </SentRequest>

7. The client gets the home pool information  

INFO APPLICATION CUcwaAppSession.cpp/1235:Updating URLs. For Ucwa: discoveredFqdn=https://webext.eu.flinchbot.com, applicationsRelativeUrl=/ucwa/v1/applications, configuredInternal=, configuredExternal=, loc=1, auto-discovery=1   

8. Client sends a request to the discovered home pool to get the UCWA URLs  

INFO TRANSPORT TransportUtilityFunctions.cpp/735:<SentRequest> GET https://webext.eu.flinchbot.com/ucwa/v1/applications Request Id: 05143B44 HttpHeader:Accept   </SentRequest>

9 and 10. The client repeats authentication steps against their home server.

11. Lync Autodiscover responds with the internal and external Lync services URLs for the user's home pool.

INFO TRANSPORT TransportUtilityFunctions.cpp/1116:<ReceivedResponse>
GET https://dirpoolwebext.us.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user?originalDomain=flinchbot.com
Request Id: 0515498C
HttpHeader:Cache-Control no-cache
HttpHeader:Content-Length 2286
HttpHeader:Content-Type application/vnd.microsoft.rtc.autodiscover+xml; v=1
HttpHeader:Date Tue, 18 Aug 2015 20:07:31 GMT
HttpHeader:Expires -1
HttpHeader:Pragma no-cache
HttpHeader:Server Microsoft-IIS/8.0
HttpHeader:StatusCode 200
HttpHeader:Strict-Transport-Security max-age=31536000; includeSubDomains
HttpHeader:Via 1.1 Lync1.us.flinchbot.com RtcExt
HttpHeader:X-AspNet-Version 4.0.30319
HttpHeader:X-Content-Type-Options nosniff
HttpHeader:X-MS-Server-Fqdn LyncServ1.eu.flinchbot.com
HttpHeader:X-Powered-By ASP.NET

<?xml version="1.0" encoding="utf-8"?><AutodiscoverResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" AccessLocation="External"><User><SipServerInternalAccess fqdn="pool.eu.flinchbot.com" port="5061" /><SipClientInternalAccess fqdn="pool.ee.flinchbot.com" port="5061" /><SipServerExternalAccess fqdn="sip1.flinchbot.com" port="5061" /><SipClientExternalAccess fqdn="sip1.flinchbot.com" port="443" /><Link token="Internal/Autodiscover" href="https://poolweb.eu.flinchbot.com/Autodiscover/AutodiscoverService.svc/root" /><Link token="Internal/AuthBroker" href="https://poolweb.eu.flinchbot.com/Reach/sip.svc" /><Link token="Internal/WebScheduler" href="https://poolweb.eu.flinchbot.com/Scheduler" /><Link token="Internal/CertProvisioning" href="https://poolweb.eu.flinchbot.com/CertProv/CertProvisioningService.svc" /><Link token="External/Autodiscover" href="https://poolwebext.eu.flinchbot.com/Autodiscover/AutodiscoverService.svc/root" /><Link token="External/AuthBroker" href="https://poolwebext.eu.flinchbot.com/Reach/sip.svc" /><Link token="External/WebScheduler" href="https://poolwebext.eu.flinchbot.com/Scheduler" /><Link token="External/CertProvisioning" href="https://poolwebext.eu.flinchbot.com/CertProv/CertProvisioningService.svc" /><Link token="Internal/Mcx" href="https://poolwebext.eu.flinchbot.com/Mcx/McxService.svc" /><Link token="External/Mcx" href="https://poolwebext.eu.flinchbot.com/Mcx/McxService.svc" /><Link token="Ucwa" href="https://poolwebext.eu.flinchbot.com/ucwa/v1/applications" /><Link token="Internal/Ucwa" href="https://poolweb.eu.flinchbot.com/ucwa/v1/applications" /><Link token="External/Ucwa" href="https://poolwebext.eu.flinchbot.com/ucwa/v1/applications" /><Link token="External/XFrame" href="https://poolwebext.eu.flinchbot.com/Autodiscover/XFrame/XFrame.html" /><Link token="Internal/XFrame" href="https://poolweb.eu.flinchbot.com/Autodiscover/XFrame/XFrame.html" /><Link token="XFrame" href="https://poolwebext.eu.flinchbot.com/Autodiscover/XFrame/XFrame.html" /><Link token="Self" href="https://poolwebext.eu.flinchbot.com/Autodiscover/AutodiscoverService.svc/root/user" /></User></AutodiscoverResponse>
INFO APPLICATION CUcwaAppSession.cpp/1235:Updating URLs. For Ucwa: discoveredFqdn=https://poolwebext.eu.flinchbot.com, applicationsRelativeUrl=/ucwa/v1/applications, configuredInternal=, configuredExternal=, loc=1, auto-discovery=1

Oct 06

Jabra Evolve 65 Review

I got this headset free through work and not from Jabra.

Jabra Evolve 65I recently got my hands on a Jabra Evolve 65 Bluetooth headset. My employer has recently begun handing these out to those who want them. And I want one because I need all the toys!


This is one of the newer headsets from Jabra and the only wireless headset in their Evolve line. According to Jabra, this headset has the following features:

World-class speakers are built for both voice and music. Switch easily between conversations and listening to your favorite tracks.

Simply wear the headset to eliminate high-frequency noise, such as human voices – all thanks to the specially designed ear cushions. We call this “passive noise cancellation.”

In-line call controller gives you easy access with large buttons and LED indicators. Pick up or end calls, control volume, or simply mute the line.

The special “busy light” turns red to let people know when you’re on the phone. You can also turn it on manually when you don’t want to be disturbed.

When you’re not on a call, you can tuck the boom arm away into the headband to keep it out of the way.

Bluetooth® Class 1.5 lets you walk up to 30 meters (100 feet) away from a connected device. This gives you great freedom of movement.

Get up to 10 hours of talk time on a single charge. Use the charging cable when you run out of battery.

Connect the headset instantly to any NFC-enabled device. Simply tap the two together and you’re ready to talk and stream music.

So let me compare their claims with my reality and see how this thing comes out. 

I do want to say at the outset that I think these are fairly stylish. Jabra seems to have decided on a simple and understated look and I think it stands out from the competition.

Now, to the features:

Like the Jabra Evolve 30's, these have very underwhelming speakers with regards to music playback. However they do sound noticeably better than the Evolve 30's (I just did a test. Man do those 30's sound terrible with music!). The music is not nearly as muddled on the Evolve 30 and there is decent bass and treble separation. These could be used for music headphones if you are one of those who is not too picky about how good your music sounds. These don't hold up at all against the Jabra Evolve 80's or the Plantronics Voyager Focus UC headset.

Their statement "Switch easily between conversations and listening to your favorite tracks." is a touch misleading as you can't actually change music tracks using the headset. The headset does stop the music while you are on a call and starts it up again when the call ends. But skipping forward to a next song is a no-go. Same with play/pause features.

The speakers do a fine job with voice.

As with the Evolve 30's, their "Passive Noise Cancellation" is well exaggerated. Putting anything over your ears will cut out some background noise. And that's about all that these provide. If you want to really block out human voices with these things, play music at a decent volume. This "feature" seems like an attempt from Jabra to make their headsets more feature complete than they really are. If you work in a super noisy environment, get something with Active Noise Cancellation as these provide no more noise cancelation than any other decent headset on the market.

Evolve 65 ControlsThe call controls are on the outer shell of one of the speakers. They seem to be logically aligned. I've not accidentally hit a wrong button or anything like that. They are also pretty responsive and act exactly as you would want them too. One minor issue is that in their design of using as few buttons as possible, muting and unmuting has a bit of a delay. To mute, you press and hold the "volume down" button. According to the manual you are to hold this button for 2 seconds to mute or unmute. I don't know about you but 2 seconds is a very long delay for a mute operation. In reality it doesn't seem to take the full 2 seconds to take effect. However a co-worker who has been using this headset for quite some time lamented that the mute operation took longer than he'd like it to take.

One great feature of this headset is that there is a busylight feature. When you are on a call, a red ring appears on the outside of the headset. But it only shows up on one of the 2 speakers meaning there is a 50/50 chance that someone walking up to you form the side will see that you are actually on a call and not just listening to music. It also can't do anything else but light up red when you are on a call. So unlike the Blync or Kuando busylights, this won't show green if you are available or flash red if you are in a meeting. 

Charging the headset is easy enough by simply connecting the provided USB charging cable into the headset. Jabra avoids the mess Plantronics came up with and they skip a charging base entirely. All things equal I prefer not having a base to having the limited use port-waster that Plantronics ships with the Voyager Focus UC.

The USB dongle is also less obnoxious than what Plantronics ships but, like Plantronics, Jabra are super-impressed with lights on a dongle too. Fortunately the light on the dongle doesn't blink for no good reason like Plantronics does. But this one does change colors seemingly randomly and the light stays on the whole time. And like the Plantronics, there is no way to turn off this light. Hey guys, take a note from everyone else and stop with the lights. Or at least give us an option to turn it off. It's distracting.

The boom microphone work pretty well however, just like the Evolve 30, it sounds like your farting when pushing the microphone up or pulling it down. Don't believe me? Well listen to this recording of me pulling the boom microphone down from directly vertical to horizontal.

Why they released this headset with that "feature" is beyond me. People on the other end of the call absolutely hear this.

So how well does the microphone work? Jabra does claim active noise cancelling with the microphone. I'll let you be the judge how well it works. I've called the Skype for Business "Check Call Quality" feature. Behind me is a server in a closet spitting out white noise. The TV is on in another room and I can hear it with my headset on my ears. I am saying the nonsensical phrase "I would like a pear for supper".

Jabra says this about the boom arm:

When you’re not on a call, you can tuck the boom arm away into the headband to keep it out of the way.

Unless you have a very small head, this statement is absolute rubbish. Yes, there is a magnet in the head band. And yes, when the speakers are pushed all the way up into the headband then the boom arm attaches to the magnet. I've made a video showing this. All Jabra had to do was make the magnet longer. The groove is there for the headset but they put in too small of a magnet. Which then makes us at work wonder why they even bothered in the first place. 

Aside form the random lights on the dongle, Bluetooth range is pretty good. It may actually be better than the Plantronics Voyager Focus UC but I didn't do scientific testing. I walked to the water fountain at work and the Evolve 65 seemed to break up less than the Voyager Focus. I can walk to all corners of my apartment and there aren't any dropouts.

I also tested the NFC pairing feature with my Nokia Lumia 1020 Windows Phone. I enabled NFC in the phone settings. The NFC zone on the Evolve 65 is on the speaker with all of the controls. So I tapped the back of my phone randomly onto the back of the speaker because I'm not entirely sure where the NFC zone is on the back of my phone. After the third tap, My phone perked up and asked if I wanted to pair it with the headset. I clicked yes and presto! My phone was paired. This worked really well and is a lot easier than any other Bluetooth pairing I've done.

Fortuitously, my dad called my freshly-paired mobile phone. I asked him how I sounded and he said I sounded as good as ever. Keep in mind that I still had a server hissing out white noise behind me and the TV on (and audible) in the other room.

In short, this is a perfectly functional Bluetooth headset. My major gripe is that the speakers are still not good enough for listening to music, at least for my tastes. The Evolve 80 and Plantronics Voyager Focus easily exceed the music playback feature of this headset. And while there are some half-baked features in this headset (busylight, boom magnet) I find it a quality Bluetooth headset for those looking for something a bit more professional-grade than what they may be currently using. 

This headset currently retails on Amazon in the US for $179.99USD. That's about the same price that you can get the newer and much better Plantronics Voyager Focus UC. As such, I find it hard to recommend this one at this time. Should there be a nice price drop then I'd have to think that the Jabra would be worth a go. This headset is also approaching a year old. Jabra is definitely on the right path here and I'm eager to see what the next generation will bring. 



Oct 05

UC Now v 1.4

430x292UC Now version 1.4 has just been pushed to the Windows Store. This version will work on Windows 8.1 and WIndows 10 along with Windows Phone 8.1

New to this version:

  • Youtube channels for Exchange and Skype for Business/Lync
  • Virtual Academy links for Exchange and Skype for Business/Lync

The app can be downloaded here – https://www.microsoft.com/en-US/store/Apps/UC-Now/9NBLGGGXTXK1 (Please leave a review – or at least a rating)

The update won't be live for a few days but you can download the current version now and it will update when the time comes.

An Android app is also available here – https://play.google.com/store/apps/details?id=com.lync.news&hl=en

The Android app was also updated tonight with a new interface which maximizes the content view. That should be an available update within the next 24 hours.


UC Now is a completely free app for Windows, Windows Phone, and Android that aggregates news and links pertaining to Skyper for Business/Lync and Exchange. Get easy access to support, testing tools, documentation, and plenty of other related information.

Sep 16

Front End Service Crashed on SBA (Stupid SQL Server!)

This article is really about SQL.


We received a SCOM alert yesterday that the Lync Front End Service (RTCSRV.exe) stopped on one of our SBA’s. Sadly, this is a fairly routine occurrence as the combination of Windows + Lync + SCOM + SCCM (especially SCCM) can overwhelm the meager 4GB on our SBA’s.

So I RDP’ed to the SBA and tried to start the Front End service. It failed. Unusually, the Mediation service and Centralized Logging Service were also stopped.

So I did Step 1 in my troubleshooting routine and opened up Event Viewer and looked at the Lync logs. I saw a bunch of failed logins to the XDS database. “Got it”, I thought to myself. “The SQL Service must have stopped”. But when I returned to Services, the SQL Service was indeed running. Just for good measure I restarted it. After the restart, none of the services would start. So that didn’t fix it.

I dug deeper into the event logs and came across the following 2 entries in the Application log.


Operating system error 1117(The request could not be performed because of an I/O device error.) on file “c:\Program Files\Microsoft SQL Server\MSSQL11.RTCLOCAL\MSSQL\DATA\xds.ldf” during SQLServerLogMgr::CheckLogBlockReadComplete.


An error occurred during recovery, preventing the database ‘xds’ (5:0) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.

That doesn’t sound good. It seems there might have been some corruption sneak in to the XDS database.

On an SBA, the XDS database holds the replicated copy of the CMS. If Lync can’t read this database on startup, it won’t know what its configuration is. So without this database, Lync won’t start.

The next step was to “look” at the database via SQL Server Management console. Except, due to firewalls, I couldn’t connect to SQL on the SBA from our main Lync pool SQL Servers. So I went about installing the SQL Server support tools on to the SBA.

Finding the download was a lot harder than it should be. But I eventually found it on this page. I downloaded the SQL Server 2012 Management Studio x64 version and got that installed.

I could now look at the status of the database. Can’t say I like what I saw.


As I am not at all skilled with SQL, I brought in one of our SQL Admins to help with this.

We went through the following:

Alter Database [xds] set emergency

DBCC did not report any errors. So we tried:

Alter Database [xds] set online

That didn’t work.

We tried a bunch of things, such as taking the DB offline and then back online.
Based on this error, I ran a chkdsk scan to see if there were bad sectors on the drive or any other disk errors.

Chkdsk reported no issues.


We ran the following but it didn’t help either.

Alter Database [xds] set single_user with rollback immediate

We ran this command too but it didn’t do anything:

EXEC sp_resetstatus 'xds'

Finally we ran the below which fixed the problem. The risk is that the below could lose data. As this is database is just a copy of the CMS, we went ahead with it. That and we didn’t have any other options 

Alter Database [xds] set emergency

That finally mounted the xds database.

Once that finally mounted, the Lync services on the SBA started successfully.

Sep 15

Jabra Evolve 30 MS Review

I was recently given this device for free from Jabra. Keep that in mind while reading the below review.


Evolve30The Jabra Evolve 30 is an entry level headset in the Evolve line that Jabra released in October 2014. The Evolve series of headsets “…Boosts Productivity in Noisy Work Environments…”. Jabra also says that this line of headsets features “…large ear cushions with specially designed foam adapting the padding to the individual, blocking office noise”. Finally, they say that these “Incorporate[s] high-end sound quality for both professional communication and entertainment.”

So does the entry level Evolve 30 match up to Jabra’s claims?

Let’s start with the first claim that the Evolve line has “large ear cushions with specially designed foam adapting the padding to the individual, blocking office noise”.

I can’t vouch for any special foam as the speakers are wrapped in some semblance of leather/plastic so I can’t see the foam. The ear cushions feel a bit stiff but not at all in a bad way. I actually like the feel on the ears. So I imagine some of that stiffness is due to the foam. This headset is light and comfortable to wear. It doesn’t press in on your head and rests nicely over your ear-holes.

I can’t say that the alleged foam actually does anything useful. In my home office where I have a HP ProLiant DL360 G6 in a closet behind me (with the doors closed), I can’t tell much of a difference in white noise levels with or without the headset covering my ears. The “technology” being used here is “Passive Noise Cancelling” as there are no electronics or anything to assist in muting the background noise. And that’s OK given the $76USD price point of this headset. However I can’t tell that it’s blocking much at all.

Simply wear the headset to eliminate high-frequency noise, such as human voices – all thanks to the specially designed ear cushions. We call this “passive noise cancellation.”

I have the TV on in the living room right now with the volume turned down to “barely audible”. I can’t make out a word being said but I can hear talking. With the headset in place, I can hear the same level of talking. So if this headset really was designed to “boost productivity in noisy work environments”  and to “eliminate…human voices” it sure isn’t due to the Passive Noise Cancelling.

Firing up a Lync call blocks out the TV noise in the background but only while I hear a voice in the speakers. When the voice stops, I can still hear the background noise just fine.

As for the “large ear cushions”…well…define “large”? Because I can still touch the tops and bottoms of my ears with these headsets situated in such a way as to cover as much ear as possible. But then I’m (6’7″)/(202cm) so my ears are probably larger than standard.

I can vouch that the top-of-the-line Evolve 80 has large ear cushions. That thing is a monster and wraps all the way around my ears. But the 30? Not so much.

Maybe they mean that the microphone is really good at blocking noise.

Here is a recording of me via the Skype for Business “Test Call Quality” feature. Keep in mind that there is a server about 10 feet behind me in a closet with the door closed and the TV is quietly talking to itself in the living room. The audio you here is exactly what my PC hears and is not recorded via the speakers on the headphones. I say the nonsensical phrase “I want a pair for supper”.


The audio has been normalized to -1.0 Db

The next claim is that the Evolve line of headsets are “Made For Music & Voice”. You can hear the voice above. As for music? I thought the Evolve 80’s had fantastic music play back so I was really excited to try these. I was hoping for above average quality – certainly not as good as the 80’s but better than the competition.

Sadly…these things are all midrange, some semblance of bass, moderate treble. There is no separation so it’s all muddled and it’s a huge disappointment.

On the Jabra web page, they actually say this:

World-class speakers are built for both voice and music. Switch easily between conversations and listening to your favorite tracks.

That first line is absolute malarkey. There is nothing “world-class” about these speakers unless “world-class” means “there’s a world of speakers out there that outclass these“.

And while I’m being a Negativa Nancy, now is as good a time as any to point out a major flaw with the design. The microphone boom can be adjusted up and down, so when you aren’t speaking you can push it up out of the way. If a call comes in, you can pull the headset down to be near your mouth.

This is nothing fancy. Pretty much every headset can do this.

Except no other headset I’ve some across has “gears” on the headset assembly. And there is a perfectly good reason for this. Below is a recording of me pulling the headset down and then back up.


The audio has been normalized to -1.0 Db

Do you really want to have someone hear that as you are pulling down the microphone at the start of a call? When I first tested with coworkers I asked if they could hear the ratcheting. One of them asked “Did you just rip one”? How did this make it through the design phase and into production?

On the upside, the cord on the Evolve 20 is plenty long so no issue there.

Evolve 20 in line controllerThe in-line controller is a rather large, round puck with easy to press buttons. It’s designed to sit on the desk and not be clipped to your lapel like some inline controllers. The back is covered in foam so that the puck doesn’t slide around. That works well enough but the weight of the puck is too light to effectively keep it from sliding around. A heavier puck would work better here but the tradeoff is that a heavy puck would be a negative if you are standing. I imagine a properly-weighted puck would start pulling your head to one side or bang into your stomach at times. While I think there can be some improvement here I do like the big controller. This puck would be perfect in a call center scenario where a busy agent can easily see the in-line controls and easily answer/hang up a call.

You can also turn the volume up/down on the puck. As seen in the picture, there are 2 LED’s, one turns green when you are in a call and the other lights red when the call is muted.

Unlike some of the other Evolve headsets, this one doesn’t have the “busylight” feature in the outside of the headset.


  • Comfortable
  • Easy to use inline controls
  • Long USB cable


  • Limp audio for music
  • Passive noise cancelling doesn’t do much
  • The price

For a suggested retail price of $76USD this just seems overpriced. Other than the comfort factor, I don’t see it as a drastic improvement over a $40-50USD headset. However, because of the inline control puck and the comfortable fit, I would recommend looking at the Jabra Evolve 30 in call-canter scenarios.


Older posts «