Introduction
The other day I posted about the patching procedure for the SharePoint 2013 Distributed Cache (Microsoft AppFabric 1.1) and on that post I got a great comment from Riccardo:
Hi Wictor, is it possible to discover the patch level of the Distributed Cache without looking at control panel? Powershell?
That is a great question Riccardo! But the answer is not that simple…
Check the version using Installed Updates
The easiest way to manually check what version of AppFabric you are using, or rather which CU that is applied to AppFabric 1.1, is to use the Program and Features tool in Windows Server and then click on View installed updates.
As you can see in the screenshot above, they all have the same version 1.1.2106.32 and that is also the version you get when you query the registry with this:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\AppFabric\V1.0\ -Name ProductVersion | select ProductVersion
That version number is the version number of Microsoft AppFabric 1.1 and it doesn’t change when you are applying Cumulative Updates.
Check the Distributed Cache version using PowerShell
If you want to automate checking the patch level of the Distributed Cache then the only way I’ve found (if someone has a better way, please enlighten me) is to actually check the version of one specific file, the Microsoft.ApplicationServer.Caching.Configuration.dll file. This is one of the few files that is updated in all the current CU’s (1-5), but I cannot guarantee that it will be updated in future version. The check is is done using the following PowerShell script (remove the line breaks and paste as a single line):
(Get-ItemProperty "C:\Program Files\AppFabric 1.1 for Windows Server\
PowershellModules\DistributedCacheConfiguration
\Microsoft.ApplicationServer.Caching.Configuration.dll" -Name VersionInfo)
.VersionInfo.ProductVersion
This script will give you different version numbers depending on your AppFabric 1.1 CU level as follows:
CU level
Product Version
CU1
1.0.4639.0
CU2
1.0.4644.0
CU3
1.0.4652.2
CU4
1.0.4653.2
CU5
1.0.4655.2
If this method is valid for future CU’s then please remind me to update this table.
Summary
So Riccardo, there you have the best answer I can give you. It is not an optimal solution but it works…