BREAKING NEWS!!! Standard Edition Front End Back in Skype for Business 2019/vNext

BREAKING NEWS…

I officially have permission from Microsoft to reveal to you that the Standard Edition role is BACK IN Skype for Business 2019.  If you remember, at Microsoft Ignite last year it was confirmed that this version would be removed and the only option for Front End pools would be Enterprise Edition.  It’s not just small organizations that use this role, very large enterprise corporations also use it in smaller branch offices where survivable branch appliances (SBA) just aren’t a good fit.  While it is possible to have a single front end in an Enterprise pool, a full version of SQL was still required, which could be costly in small organizations and even branch office scenarios.

I want to give a special thank you to Microsoft for reconsidering this feature, and all of you that voted and commented in the feedback link below (though you don’t need to anymore).

https://www.skypefeedback.com/forums/299913-generally-available/suggestions/31729714-add-the-standard-edition-front-end-role-to-skype-f

If you’re curious or weren’t aware that the role was removed initially, you can watch the Microsoft Ignite event where the removal was first announced here:

https://myignite.microsoft.com/videos/53241

 

 

Catch me on TeamsRecap

TeamsRecap (if you don’t subscribe you should) is MVP Josh Blalock’s video series that keeps you up to date on Microsoft Teams and Skype and walks through what the news is and what it means.  It’s a convenient way to keep up to date if you find the constant announcements of new features a bit too much.  Honestly, Teams is one of the fastest developing projects I’ve seen at Microsoft and they are keeping true to the roadmap and hitting those dates.  Josh’s show is very interesting to watch, super valuable, and an easy way to stay current.

Josh was kind enough to let me visit for one of his shows, and I want to thank him for that.  It was a fun time and a great experience.

Thank you Josh!

 

 

What happens when I call 911 from my Skype for Business or Teams mobile client?

Now that calling in Teams is GA, you may be wondering, what happens when you call 911 with Microsoft Phone System using a desk phone or full client?  I cover that in more detail in another blog post, but basically the call is intercepted by a certified 911 operator and they confirm that you’re in the location assigned to you in the portal before delivering your call, if not, they correct it and get you to the correct emergency dispatch (PSAP).

But what if you’re using your mobile client with Skype for Business or Teams?  It doesn’t matter if you’re in the cloud or not, if you’re using Microsoft as a telephone provider or not (though this is the only way to get Teams), that call will go through your cell phone provider.

Why?  Well, there’s a few reasons.  The first is simply that it’s an external connection, and we can’t locate you (no LIS or location information service) if you’re connected through an Edge server.  But in the cloud EVERYONE is connected through an Edge server and there’s no dynamic location services yet anyway.  Well, Microsoft assumes and rightly so, that your cell phone’s GPS is going to do a better job of locating you than whichever service you may be employing.

Too afraid to test out E911 calling on the mobile clients?  No problem, I did it for you!

Here we are making a call from the Skype for Business Mobile client.  This is an iPhone, so once you hit the call button, it sends the call to the mobile phone which asks me to confirm the call by hitting the Call button again.  Once I hit that, I’m on the line with police using my mobile phone only.

And now that calling is available in Teams, let’s make the same call from the Teams Mobile client to make sure they didn’t forget this important feature.  Of course they didn’t, and it’s the exact same experience.

It’s always important to test E911 services with any solution.  However, to avoid fines and to simply be considerate, please call your local dispatch’s non-emergency number first and ask permission to find out if it’s a good time.  In some metropolitan locations you will need to schedule your test calls in advance to avoid fines.  In the suburbs, they don’t always have many calls happening and you may be OK to make that call immediately after you ask permission.  When they answer, remember that your first statement should be that the call is not an emergency, but rather a test.  Ask them to provider the phone number and location you’re calling from to validate your deployment, and ALWAYS BE POLITE!

 

Microsoft Phone System: You’re not set up to use this calling feature

This has come up with a few of my hybrid clients, and it’s not very clear error message so I thought I’d take a minute to post about it.

Issue: You make a call with Microsoft Teams or Skype for Business and instead of reaching the recipient, you hear “You’re not set up to use this calling feature.  Please contact your admin.” from the Diagnostic Announcement Service.

This can arise in a few scenarios.  Scenario 1 is when you’re using Microsoft as you’re telephony provider.  You have Microsoft Phone System licensing and a valid calling plan, but you’re hearing this message.  This typically is due to the user not having a phone number assigned.  If you do have a phone number assigned, try un-assigning it and re-assigning it.

Scenario 2 is the hybrid scenario.  This is where the client is using Cloud Connector Edition (CCE) or OPCH (effectively Lync or a Skype for Business Server on-premises handling hybrid voice).  In this scenario you don’t want a phone number assigned.  I’ve often found that the client has assigned a Domestic Calling Plan or even left Communications Credits enabled as a license for the users.  Disabling the calling plan and/or credits should get the user back to functional.

Oddly enough, I’ve got a client that has most users enabled with communications credits, but a only a small percentage receive the error.  I haven’t worked that out yet past removing the communication credits licensing from their accounts.

Quick Script: Office 365 License Information for Skype and Teams

I found myself in need of a specific script during a tenant migration, one that only included information about Skype for Business Online and Microsoft Teams.  There wasn’t anything out there that exactly matched what I needed, so I created the following with a bit of reverse engineering and help from support.office.com.  If the script is at all helpful, please feel free to use it, hack it up, send me improvements, whatever you’d like.

The outputs of the script is a CSV and a GridView showing the results of the license data.  The names of the licenses are a bit cryptic, but I’ll summarize them below:

  • TEAMS1- Microsoft Teams
  • MCOSTANDARD – Skype for Business Plan 2
  • MCOMEETADV – Audio Conferencing (formerly PSTN Conferencing)
  • MCOEV – Phone System (formerly Cloud PBX)
  • MCOPSTN1 – Domestic Calling Plan
  • MCOPSTN2 – International Calling Plan
  • MCOPSTNPP – Communication Credits

UPDATE: I ran across a tenant with a 120 minute domestic calling plan, which is available through an EA.  This plan is labelled as MCOPSTN_5.

I’m not certain I grabbed all of the values, so please comment and help me improve the script.

The script itself should be run after you connect to your tenant via PowerShell.  If you’re not sure how, read the following article: https://technet.microsoft.com/en-us/library/dn975125.aspx but in a nutshell, you’ll need to download a PowerShell module and run the Connect-MsolService command.

Once you’re connected, the script to run is here:

$LICENSEOBJECT = @()
$ALLUSERS=Get-MSOLUser -all
$ALLUSERSCOUNT=$ALLUSERS.COUNT
$COUNTER=0

foreach($msolUser in $ALLUSERS)
 {
  $COUNTER++
  $MCOEV=""
  $MCOMEETADV=""
  $MCOSTANDARD=""
  $MCOPSTN1=""
  $MCOPSTN2=""
  $MCOPSTNPP=""  
  $TEAMS1=""

  $UserInfo = Get-MSOLUser -UserPrincipalName $msolUser.UserPrincipalName
  foreach($license in $msolUser.Licenses)
   {
    if ($license.servicestatus|where {$_.serviceplan.servicename -like "MCOEV"}) 
     {
      $MCOEV=$license.servicestatus|where {$_.serviceplan.servicename -like "MCOEV"}
     }
       
    if ($license.servicestatus|where {$_.serviceplan.servicename -like "MCOMEETADV"}) 
     {
      $MCOMEETADV=$license.servicestatus|where {$_.serviceplan.servicename -like "MCOMEETADV"}
     }
     
    if ($license.servicestatus|where {$_.serviceplan.servicename -like "MCOSTANDARD"})
     {
      $MCOSTANDARD=$license.servicestatus|where {$_.serviceplan.servicename -like "MCOSTANDARD"}
     }

    if ($license.servicestatus|where {$_.serviceplan.servicename -like "MCOPSTN1"})
     {
      $MCOPSTN1=$license.servicestatus|where {$_.serviceplan.servicename -like "MCOPSTN1"}
     }

    if ($license.servicestatus|where {$_.serviceplan.servicename -like "MCOPSTN2"})
     {
      $MCOPSTN2=$license.servicestatus|where {$_.serviceplan.servicename -like "MCOPSTN2"}
     }

    if ($license.servicestatus|where {$_.serviceplan.servicename -like "MCOPSTNPP"})
     {
      $MCOPSTNPP=$license.servicestatus|where {$_.serviceplan.servicename -like "MCOPSTNPP"}
     }

    if ($license.servicestatus|where {$_.serviceplan.servicename -like "TEAMS1"})
     {
      $TEAMS1=$license.servicestatus|where {$_.serviceplan.servicename -like "TEAMS1"}
     }
   }

   $LICENSEOBJECT += New-Object PsObject -Property @{
    "DisplayName"="$($UserInfo.DisplayName)"
    "UserPrincipalName"="$($Msoluser.UserPrincipalName)"
    "TEAMS1"=$TEAMS1.ProvisioningStatus
    "MCOEV"=$MCOEV.ProvisioningStatus
    "MCOMEETADV"=$MCOMEETADV.ProvisioningStatus
    "MCOSTANDARD"=$MCOSTANDARD.ProvisioningStatus
    "MCOPSTN1"=$MCOPSTN1.ProvisioningStatus
    "MCOPSTN2"=$MCOPSTN2.ProvisioningStatus
    "MCOPSTNPP"=$MCOPSTNPP.ProvisioningStatus
   }

   write "Processing $($UserInfo.DisplayName) $COUNTER \ $ALLUSERSCOUNT"
 }

#This line creates a CSV for your personal use
$LICENSEOBJECT | SELECT DisplayName,UserPrincipalName,TEAMS1,M* | export-csv License.csv -NoTypeInformation

#This line outputs the data into Out-Gridview
$LICENSEOBJECT | SELECT DisplayName,UserPrincipalName,TEAMS1,M* | Out-GridView

 

 

No Script Needed: List all GPOs related to Skype or Lync for your domain.

I saw a question out there asking if there was a script to list the group policy objects in an organization related to Lync or Skype settings.   I’m not aware of one, but I didn’t really look.  I did know that it was possible to check thanks to Pat Richard’s QOS Calculator which includes a tab that generates the PowerShell code to create a GPO for you (seriously, that’s a heck of a tool).  So, I figured I’d take a break and whip the following command up to answer the question, keep in mind I ran it directly from my domain controller as you’ll need the RSAT installed to get the PowerShell module for the GPO.

Get-GPO -all | foreach { if ((Get-GPOReport -guid $_.id -ReportType XML) -match “Lync|Skype”) {write $_.DisplayName}}

*UPDATE: Pat Richard has already optimized my PowerShell command.  New smaller command can be seen above.

Yes, Your Cloud PBX CNAM Might Be Wrong, But Be Patient

For those of you leveraging Microsoft Skype for Business Online Cloud PBX with a number obtained by using a PSTN Calling License, you might have noticed an outbound call showing up with the wrong CNAM, or Caller ID Name.  While Microsoft has handled many of these already, there are still some out there.    If a user brings this to your attention, you can check using opencnam.com, or a number of other tools.  These can even be scripted to check blocks of numbers.

Once you’ve identified the number with an incorrect CNAM, you’ll need to open a ticket with Microsoft, but please be patient, as of right now we’re hearing that there’s a bit of a backlog handling these.

OpenCnam.com Website Screenshot

New Skype Phone Number Assignment: Failed to Return Unique Result

This is a post that mostly serves as a PowerShell reminder to myself, but the long and short is that I had a client attempting to add a new user with a phone number that they believed wasn’t assigned anywhere.  They had run their favored scripts that list all numbers but were coming up short as to why Skype was blocking them from adding the user.

PS C:\Users\AnthonyCaragol\Desktop> .\Lync_Common_Area_Phone_Tool_v1_2.ps1
 New-CsCommonAreaPhone : Filter failed to return unique result, "[LineURI :
 tel:+16305551212] [PrivateLine : tel:+16305551212] "

As it turns out, and I can’t say how or why at this time (comment if you have a guess), but the account was removed from Lync at some point but the attributes were left behind.    In these situations, the commands I use to trace the line to a user object is as follows (where 5551212 is the number):

get-aduser -filter {msRTCSIP-Line -like "*5551212*"}
get-aduser -filter {msRTCSIP-PrivateLine -like "*5551212*"}

Update:  Jeff Brown has fought issues like this before as well, and has taken the fight right into the databases, see his encounter here – https://www.jeffbrown.tech/single-post/2014/11/01/Cleaning-Up-Leftover-Lync-Accounts

 

Move-CSUser returns “Index was outside the bounds of the array”

This is a simple but confusing one my clients have had various issues with, so I thought I’d write something up quickly.  You’re moving Lync or Skype for Business Server users to Skype for Business Online in Office 365.  During the move operation you receive an error similar to the following:

Move-CsUser : Index was outside the bounds of the array.
At line:1 char:1
+ Move-CsUser -Identity "John User" -Target sipfed.online.lync.com
-Credential $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : InvalidOperation: (CN=John User,...=contoso,DC
   =com:OCSADUser) [Move-CsUser], IndexOutOfRangeException
    + FullyQualifiedErrorId : MoveError,Microsoft.Rtc.Management.AD.Cmdlets.Mo
   veOcsUserCmdlet

Not the most helpful error and definitely confusing.  Nine times out of ten, this error is simply telling you that either A) You don’t have the permissions you think you do or B) The user isn’t licensed for what you’re trying to accomplish in the cloud (likely the case if it’s only affecting a single user or a few).

Checking B is easy, login to your O365 portal and ensure that the user has the correct licensing.  Don’t just assume because E1, E3, or E5 is on, that Skype is individually checked.  Double check when the user fails to move.

Checking A is a little more difficult.  You need to ensure that the account(s) you’re using have full access to move the user both on-premises, and into Skype Online.  When in doubt, use a CSAdministrator on-premises and Global Administrator account in Office 365 to test if this is the issue.  Please not that you don’t need the above maximum rights to move users, but it will help you eliminate variables to identify the source of the issue and help you move forward.

It’s also been noted (thanks Mark Vale) that when DirSync or Azure AD Connect is installed prior to Skype or Lync, the attributes may not be properly syncing to/from the tenant as they’re not automatically added with a later Skype installation.  Perhaps you’re using a third party IDM and missed these attributes entirely.  You will need to reconfig AAD Connect or your sync tool of choice to get these added in properly.

Beyond that, we’ve even seen issues with an incorrectly provisioned SQL rights pop up, and a few other oddities, but hopefully this moves you along on your path to the cloud.

 

AudioCodes IP Phones Certified for Skype for Business Online

In case you missed it, AudioCodes just became the latest phone vendor to become certified for Skype for Business Online, meaning that the 440HD phones can be used both on-premises and online.  Other phones in the series including the 420HD and 450HD should follow shortly.

AudioCodes phones are a very compelling addition to the Skype ecosystem in my opinion due to several factors.

  1. They have the ability to leverage the SILK protocol right on the phone.
  2. The single-vendor aspect for phones, management, and SBC/ATA/Gateway hardware.
  3.  The very competitive price-point.
  4. Their IP phone management suite, which is even available free for up to 500 phones.

You can check out the official press release here for more info:  http://www.audiocodes.com/press-releases/audiocodes-ip-phone-achieves-microsoft-skype-for-business-online-certification

audiocodesjpg