Monthly Archives: July 2014

Do I need a Lync License For a Common Area Phone?

First, thank you for being an honest person and finding this article.  Secondly, it depends, but we’ll walk through it.  The first thing you should know is that there’s a licensing guide that covers these details.  As of the time of this blog post, it can be found here:

First the basics; There are three flavors of Lync CALs; they are Standard, Enterprise, and Plus.  You’ll always need a Standard CAL, it’s your basic CAL for Instant Messaging, presence and one-to-one audio/video chatting.  The other two you would need in addition for the Standard CAL.  Enterprise is for conferencing (this includes desktop sharing and almost any other modality with more than two users present with the exception of IM).  The Plus CAL is for enterprise voice or phone use, but like the Enterprise CAL this also includes voice conferencing.  Each of these CALs are broken into two types; the device CAL and the user CAL.  The user CAL is of course a CAL assigned to a user.  That user can use any number of devices as long as there’s a CAL purchased for them, but other unlicensed users can’t use their devices.  A device CAL would be assigned to a device such as a phone, and unlicensed users can use this device but can’t use another unlicensed device.

That’s good to know, but doesn’t quite answer the question.  The answer can be found in the guide linked above in section 6.1.1.

    • Optimized phones that are primarily used by Lync users licensed to use Lync under a user based CAL approach do not require additional CALs to connect to Lync Server. Examples would be hot desking phones that are used in a shared cubicle environment where all users are licensed for Lync or conference room phones within an environment where all or most conference room users are licensed for Lync.

    • Optimized phones that are primarily used by individuals not licensed to use Lync require a Lync Standard CAL and a Lync Plus CAL[1]. Examples would be common area phones in reception areas, conference phones in meeting rooms used primarily by covered employees not licensed for Lync, and shared phones used by multiple users not licensed under Lync user CALs (but who may use Lync via shared computers covered by Device CALs).

[1] Lync phones do not require Windows CALs as they authenticate against Lync Server, not Active Directory and do not access Windows Server features

The guide continues in section 6.1.2 to say that compatible/qualified phones for Lync have the same licensing requirements as the optimized phones referenced above.

So, let’s look at the conference room phone example.  If all of your users are licensed with Lync user CALs, they can freely use the conference room phone even if it’s logged in as a common area phone or different user account.  The guide says “most conference room users are licensed for Lync” and I take it to mean that if your mother shows up in your conference room to congratulate you on your Lync rollout during a call, you don’t need to quickly buy her a user CAL.

Now let’s take the same room and put it in a school.  The students aren’t licensed with user CALs in this scenario, but they’re the primary users of that phone.  In this case, then you will want a Standard device CAL and Plus device CAL for the phone.

Please understand that of course I do not work for Microsoft and cannot speak for them, this is simply my interpretation of the licensing guide.  License at your own risk, and thank you for reading.


One Line: Apply Policies To Lync Users Not in a Group

A while ago I wrote about one line of PowerShell to bulk enable users based on group membership.  The question has recently come up, what if they’re not in a group?  That’s a little bit trickier, but not too rough.

Why might you want to do this?  Perhaps we want to set a policy for everyone but exclude certain executives or the sales department.  Another example, let’s say we have two mobility policies, MobilityEnabled and MobilityDisabled.  We could run a scheduled task that grants MobilityEnabled for all Lync users in a group, but for those who have been removed for the group, we want to turn it off by granting MobilityDisabled (if you don’t want any specific policy, use $null).

As I’ve suggested in my other article, there are scripts that can do this as well.  Those scripts will give you more flexibility to add additional commands, but I like personally also like to keep one-liners that I can quickly cut and paste during administrative work.

It’s easy to illustrate this with an example using the Grant-CsMobilityPolicy scenario above:

Get-CsUser | ForEach {$myuser=$_;if (-not (Get-ADGroupMember “Your Group” | Where { $_.samaccountname -eq $myuser.samaccountname } )) { Grant-CsMobilityPolicy $myuser.identity -policyname “MobilityDisabled“}}

Swap the Grant-CsMobilityPolicy command for anything you’d like.

Of course, if you like this command as the one-liner to add based on a group better than the method mentioned in my previous article, just remove the -not, there are always many ways to accomplish the same thing with PowerShell.


This Just In: SharePoint, MEC, Lync, and Other Conferences Merged!

This just in… Microsoft has merged their technical conferences into one giant mega-conference.  The good news is that it’s going to be in Chicago next year (OK, that was selfish of me since I live here).  What seems to have a lot of people nervous, myself included, is that it’s only ~5 days.  May 4-8, 2015.  If you’re a fan of multiple Microsoft technologies, you’re not going to be able to attend all the talks that you’d want unless content is scaled back greatly.  There’s also a bit of concern that the talks will fill quickly due to a much larger attendance (Don’t take my seat, curious SharePoint guy!).  If you’re like me, you’re really going to spend your time afterwards glued to Channel9 to watch the recordings.

“If you attended the SharePoint Conference, Exchange Conference, Lync Conference or Project Conference, this is the conference for you. And, if you’re interested in or already using Office 365, this is the conference for you.”

That’s not to say it’s a bad thing, it’s just change.   I’m sure it will still be a blast, and they’ll pull it all off, so no judgment from me until May 9, 2015 🙂

More information:


Reminder: Chicago UC Users Group (And San Fran, Detroit, Nashville…)

Just a reminder that the quarterly US Lync Users Groups are in full swing right now.  I’ll be attending the Chicago group this Thursday, July 24.  If you haven’t ever attended, I HIGHLY recommend going for the great presentations as well as the networking with other individuals excited about Microsoft Lync.  This isn’t some unorganized dry meeting either, it’s put together by some pretty heavy hitters in the Lync world.  Sorry, this post is a bit late if you’re in Cincinnati or LA, but for the rest of us head over to and find your group on  If you’re also headed to the Chicago one, come find me and say hi!

  • July 15th – Cincinnati, OH
  • July 16th – Los Angeles, CA
  • July 22nd – Philadelphia, PA
  • July 24th – Chicago, IL
  • July 24th – San Francisco, CA
  • July 29th – Detroit, MI
  • July 29th – Nashville, TN
  • July 29th – Silicon Valley, CA
  • July 31st – Atlanta, GA
  • July 31st – Milwaukee, WI
  • August 4th – Portland, OR
  • August 5th – Seattle, WA
  • August 7th – New York, NY
  • August 8th – Boise, ID
  • August 13th – Charlotte, NC


Change Lync 2013 Privacy Relationships via Update-CSUserData

A question came up recently where a Lync 2013 admin was pre-populating contacts for users.  They were using a custom XML that was generated from a Export-CSUserData dump from a template Lync user.  (If you want to know more about how to do that, I can explain another time, just ask).  They then modified the DocItemSet file within the exported zip to match each user and were running either Import-CSUserData or Update-CSUserData to merge the data into the user’s contact lists.  The issue was that they couldn’t figure out how to set the privacy relationship within this file.  This took a bit of reverse engineering, so take this with a grain of salt, but the key is to look at the container tags.


In the above pic, you’ll see under DocItemSet.DocItem.Data.HomedResource.Containers there are several containers each with a unique ContainerNumber.  The important ones to know are the following:

  • 100 = External Contacts
  • 200 = Colleagues
  • 300 = WorkGroup
  • 400 = Friends and Family
  • 32000 = Blocked
  • No container = Default

Adding the <UserMember Member=””/> tag directly under the appropriate container number and merging the data using Update-CsUserData appears to properly reassign the user’s privacy relationship.  Removing all <UserMember> tags that correspond to a user sets them back to the default relationship, for internal users this would be Colleagues.

For more information on running the Export-CSUserData, Import-CSUserData, and Update-CSUser data commands, please see the TechNet Wiki article below:

For more information on the differences between privacy relationships, please look here:


New Tool: Lync 2013 Contact Backup and Restore Tool (GUI)

I developed this tool simply because I realized when attempting a Lync 2013 contact restore that it’s difficult to tell which backup to use.  This is especially true when the user can’t quite remember when or how the contacts were removed.  I also realized that for some companies, not all of the staff is PowerShell savvy and enabling them to make easy backups and restores through a GUI would prove to be quite helpful.  What I’ve done is written a tool that allows for easy backups and restores of contact data, and also allows you to review the contents of your backup before you merge the data into your production system.  To run the tool, simply download the script from the TechNet Gallery and run it from a Lync server.  One item to note before we start, the PowerShell commands this tool uses do not work with the unified contact store (UCS).  What this means is you’re fine with this tool if you’re running Exchange 2010 or prior, or if you’re running Exchange 2013 but haven’t enabled the unified contact store to move your contacts out of Lync and exclusively into Exchange.

Run the script and right away you’ll see a form like below.  Click the Step 1 button to load up an existing backup file.  These backup files are created by running Export-CSUserData and should be included as part of a script that runs on your systems nightly.  If you don’t have one (you should), you can also create one by clicking one of the backup buttons at the bottom of the form.  Once you click the Step 1 button, a browse dialog will pop up allowing you to select your backup file.  The script will then load your users into the box above the button.


Once your contacts are loaded, you can then select a user by highlighting them.  If you know the data is good, you can proceed directly to Merge Selected User, which will be described later, or to review the contents of the backup file, you can click the Step 2 button.


This button should load the contact information for the selected user only and display it for you to see.  Again, if the appropriate information is selected, you can skip right to the Merge Selected User button, or if you’d like to compare the information to the current contact information, you can click the Step 3 button as seen below.


You should now see both the current and backup contact information displayed side by side for comparison.  In the picture below, I found a deleted phone number and distribution group.  I can now simply click the Merge button and the contacts will be merged into your current Lync contacts.  Once the user has logged out and back into the Lync client, the restored contacts will reappear.


Finally, there are two buttons at the bottom that allow for easy user level and pool level backups.  Simply enter the sip address or the pool FQDN when prompted, and select a save location for your newly created file.


To quit, please press the Quit button to allow the program to properly clean up after itself or you might see a temporary directory where the contents of your backups have been extracted.

To download the program, please find it here in the TechNet Gallery:

If you like it please give it 5 stars over at the TechNet Gallery, if not, please drop me a line before you rate it and give me a chance at fixing whatever bug you may have found.   I might also be able to add a feature you’d like to see!

Thanks again and let me know what you think!


Lync Quick Tip: Disable Pre-Population of Contacts

You may have noticed when enabling a fresh Lync 2010 or Lync 2013 user, upon first login they already have some contacts in their favorites or frequent contacts.  Sometimes these contacts are odd and show up as a phone or mobile number.  Where do they come from and how do you get rid of them?

Well, it’s actually been around and is a feature introduced in Lync 2010.  From the article: we read:

“The Frequent Contacts group shows the 10 contacts a user most frequently has conversations with (not necessarily the most recent). Lync pre-populates the group with the user’s team members. Users can pin their favorite or important contacts to the top of their Frequent Contacts group.”

In Lync 2013 of course, Frequent Contacts was renamed to Favorites.    These team members can be found in the Organization tab of the Active Directory User:


So, how do we turn this off?   Well, we can remove the direct reports in AD, but it’s probably there for a reason (we don’t want to go head to head with whomever in HR may have published them).  Enter the AutoInitiateContacts  parameter within the privacy configuration.  We can set this with the Set-CSPrivacyConfiguration command:  From the article: “If True, Lync will automatically add your manager and your direct reports to your Contacts list. The default value is True.”

To disable this for all of your privacy configurations, run the following command:

Get-CSPrivacyConfiguration | Set-CSPrivacyConfiguration -AutoInitiateContacts $False

To set it for a specific site, you’ll want to run the Set-CSPrivacyConfiguration with the identity parameter pointing to your site if you have this configured.


New Tool: Change Lync Conferencing Dial-In Number Display Order (GUI)

I wrote this for the last blog post, Reviewing and Reordering Lync 2013 Dial-In Conferencing Numbers.

Basically, I realized that if you have quite a few numbers to display, swapping the order around can be a pain.  So, I wrote a PowerShell GUI to do all the heavy lifting for you!

From the link to the TechNet Gallery at the bottom:

If you ever have more than a few Lync dial-in conferencing numbers but the order is off, you know it can be a pain to rearrange them.  That’s the whole purpose of this GUI.  It’s a simple PowerShell script that can be run from your Lync server or anywhere the Lync Management Shell is installed.  No parameters to specify, just pick your region in the dropdown box and move your numbers up, down, to the top, and to the bottom.

I have noticed that the change may take a few minutes to take effect and users may need to restart Outlook before the change is seen.  This is a function of Lync, not the script itself.

If you like it, please give me 5 stars!  If you don’t, please let me know why before rating (in the Q/A section, or find me on Twitter or LinkedIn via my TechNet profile).  I can make that bug fix for you, or possibly make the additon you’re looking for depending on complexity.

Before you run any script from the Internet, please back up your data as you agree to run this at your own risk!


Try it here:

Reviewing and Reordering Lync 2013 Dial-In Conferencing Numbers

You’re using Lync 2013, you’ve entered several different conferencing numbers for your region, and now when you go to create a Lync meeting invite the numbers are out of order or just aren’t logically arranged.  How can you change the order?  Well, there’s a setting for that and the trick is of course in PowerShell with the Lync Management Shell.  This can be a bit tricky at first because if you simply run Get-CSDialinConferencingAccessNumber you won’t see the priority list.  Well, there’s a trick to that too, you have to specify the region and also specify that you want to see all parameters as shown below:

Get-CSDialinConferencingAccessNumber -Region “Illinois” | format-list *


You’ll see the a priority 0 and a priority 1 entry.  The lowest number is the first to be displayed in the meeting invite.  In our example above, this means that 312 666 1212 is displayed before 312 555 1212, and that CAN NOT HAPPEN!  So, the simple trick to make the change with Set-CSDialinConferencingAccessNumber.  To run this command, you’ll need to specify two settings, the first is the Priority, the second is the ReorderRegion.  In our example, I effectively want to move our 312 555 1212 to the top of the list.  To do this I’d run:

Set-CsDialInConferencingAccessNumber -Identity – Priority 0 -ReorderedRegion “Illinois”

Notice here that I set the priority of temp1dialin (which matches the 312 555 1212 number we want to move up) to 0, which is the lowest number.  However, isn’t this number already specified as the priority of the other number?  Not to worry, Lync figures it out and reorders appropriately.


If we wanted more granular control, perhaps we have many numbers, we could execute the command repeatedly with priorities starting from 0 and moving higher like so:

Set-CsDialInConferencingAccessNumber -Identity -Priority 0 -ReorderedRegion “Illinois”

Set-CsDialInConferencingAccessNumber -Identity -Priority 1 -ReorderedRegion “Illinois”

Set-CsDialInConferencingAccessNumber -Identity -Priority 2 -ReorderedRegion “Illinois”

That’s pretty much it.  It’s not difficult, but it’s also not something you might just stumble across.  Good luck and if you have any questions, remember the best way to reach me is via LinkedIn or Twitter so find me and ping me there!  Also, stay tuned because in the next post I will reveal a simple GUI that does all of this for you!