Tuesday, 5 November 2013

Calculating CAL requirements for Exchange Server 2013

Today I had a request from finance to calculate our Standard and Enterprise CALs for Exchange 2013. We have historically relied on exART data but as Exchange 2010 has this feature in the EMC and via Powershell, I knew Exchange 2013 likely would have also.

Things have changed since Exchange 2010 however. Two Powershell commands are available. Get-ExchangeServerAccessLicense reports on the licenses available to be reported on. Get-ExchangeServerAccessLicenseUser will total up the CALs required for different scenarios. I am specifically looking for Standard CAL and Enterprise CAL usage so these two Powershell commands should give me what I need.

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

They both work, but what I found was that ZERO Enterprise CALs came back continually. I knew this couldn't be the case as we have both Unified Messaging and in-place Archives enabled, and Microsoft licensing states these are Enterprise CAL features: http://office.microsoft.com/en-gb/exchange/microsoft-exchange-server-licensing-licensing-overview-FX103746915.aspx

So what was up?

Digging into Powershell I confirmed the numbers for UM:

Just in case it was a UM specific issue, I tried it against in-place Archive, and again I got hits so it appears there's an apparent Enterprise CAL calculation issue in the code.

Back in Exchange 2010 there were two great TechNet scripts for Exchange 2010 and Exchange 2010 SP1+ You can see them here:

Unfortunately they don't work (I immediately tried the SP1 version):

The above was the first of many errors. So I have gone through the code and cleaned up what isn't supported anymore like you see above, Managed Folder Policies; and also changed all cmdlets that have changed since Exchange 2010 SP3 to Exchange 2013 as well as tidy up a few other bits and pieces and remove any old Enterprise CAL features that are now support via the Standard CAL.

Currently Data Loss Prevention is a manual check, as I wanted to get this out of the door today and we don't use that feature here, but by all means add it into the code and let me know!

This is how it looks, working, against Exchange 2013 today:

You can grab the updated ReportExchangeCALS.ps1 script now for Exchange 2013, here.


Update: Jeff Guillet (follow him on Twitter @expta) has also pointed out that the Exchange 2013 Help File (chm) has incorrect information for these licensing Powershell commands, so don't reference them!

Take care,

Oliver Moazzezi - MVP Exchange Server