Category Archives: Lync

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!

 

 

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

 

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

Workaround: Add a Skype Menu Item for Meet Now Dedicated

I’ve had this request from a client and it’s hit TechNet forums as well so I wanted to drop this workaround here.

Issue: When you click Meet Now from the Lync or Skype client, it takes you into a new meeting space, the user would prefer to use their dedicated meeting space.

As the issue states, some people have their dedicated meeting space PSTN conference IDs memorized.  If they want to quickly join a meeting using the IDs they’ve already handed out, rather than whatever method they were using before, they just want a menu item in their client.

The trick I’ve given out is as follows:

  1. Figure out the conference conf: link.
  2. Add the link to a reg key.
  3. Exit and restart the client.

The solution looks like this:

DedicatedMeeting

To get that menu item, paste the following reg key into Notepad and replace the conf: url with the user’s.  Also note that if you’re using Office 2013, replace Office\16.0 with Office\15.0.  To figure out the conf url, just swap out my sip address (anthony.caragol@domain.com) with your user’s, then replace 055VM3JB (my conference ID) with your user’s.  To find your user’s conference ID, you can edit the hyperlink in a new meeting invite (for the dedicated meeting space) and use the alphanumeric ID past the last /.  You can also use my tool here to get this info for all users at once: https://gallery.technet.microsoft.com/Lync-2013-Get-External-deab4539

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Lync\SessionManager\Apps\{2F3F07C6-7E0B-462B-AAD7-98C6DBEA8F69}]
“Name”=”Meet Now (Dedicated)”
“Path”=”conf:sip:anthony.caragol@domain.com;gruu;opaque=app:conf:focus:id:055VM3JB%3Frequired-media=audio”
“OriginatorPath”=”conf:sip:anthony.caragol@domain.com;gruu;opaque=app:conf:focus:id:055VM3JB%3Frequired-media=audio”
“SessionType”=dword:00000002
“ApplicationType”=dword:00000001
“ExtensibleMenu”=”MainWindowActions;ContactCardMenu;ConversationWindowActions;MainWindowRightClick”

There are other options too, such as scheduling a recurring meeting at a time that’s not intrusive so it’s always in the meetings section of the client for a quick join.  Comment below if you have a better way or improvement as I imagine there are better methods.

QuickTip: Disable Skype RGS Queue Time-Out or Overflow via PowerShell

Recently on the TechNet forums, someone was attempting to disable a response group queue time-out and overflow programatically within a PowerShell script.  In the control panel, there is an obvious check box, but in the PowerShell object, there is no obvious Boolean equivalent to enable/disable.

WhereToDisableRGS

The simple trick is to set the TimeoutThreshold and OverflowThreshold values to $null instead of a numeric seconds value.

The following simple method will clear both of these checkboxes for you.

$My_RSG_Queue = Get-CSRGSQueue -identity [Your-Queue-Identity]

$My_RSG_Queue.TimeoutThreshold = $null

$My_RSG_Queue.OverflowTheshold = $null

Set-CSRGSQueue $My_RSG_Queue