Backtrack:  
 
by lunarg on September 17th 2015, at 16:40

Sometimes, it may be handy to know how many CALs in Exchange are now actually in use. In Exchange 2010 and 2013, this can be done very easily.

There are two types of Exchange CALs: Standard and Enterprise. For the majority, the CALs provide the same feature, accept for Enterprise, which has the following additional features:

  • Mailbox archiving
  • Per-mailbox journaling
  • Unified Messaging

If a mailbox uses any of these "enterprise" features, then it is treated as an Enterprise CAL. If not, it is a Standard CAL.

License compliancy
This process "calculates" the current required CALs, not the CALs you have purchased. It's up to you to determine whether you are compliant.

Exchange 2010

In Exchange 2010, the health collector also gathers information about the mailboxes in use, and can then calculate the number of CALs that are needed. You find the number of CALs currently required on the first page of the Exchange Management Console:

Note that the calculation method is not entirely accurate. Usually, there are issues or mailboxes not being accounted for. There's this script from TechNet which does a better job.

Exchange 2013

Exchange 2013 no longer shows licensing information as such, because of the inaccuracy of the method used in Exchange 2010. Exchange 2013 does introduce a new, interesting cmdlet in the Exchange Management Shell (EMS) that can be used for the same purpose: Get-ExchangeServerAccessLicenseUser.

To get a list of all mailboxes that require a Standard CAL:

Get-ExchangeServerAccessLicenseUser –LicenseName "Exchange Server 2013 Standard CAL"

This would output a list of all mailboxes that need a Standard CAL. A good way to get a total figure would be obtained by running:

Get-ExchangeServerAccessLicenseUser –LicenseName "Exchange Server 2013 Standard CAL" | Measure-Object | Select Count

With this cmdlet, you can also obtain the license installed on the server. The cmdlet below will show a list of all Exchange servers in the organization that is running Enterprise Server:

Get-ExchangeServerAccessLicenseUser –LicenseName "Exchange Server 2013 Enterprise Edition"

Replace "Enterprise" with "Standard" to get the list for Standard Edition.

The only drawback is that this cmdlet does not properly account for Enterprise CALs. Running the cmdlet to look for those always returns no results. For this, MVP Oliver Moazzezi has written an article about this, and included a script to correctly retrieve Enterprise CAL counts.