I previously wrote a post about how you can check/get a list of BizTalk Server 2013 R2 Cumulative Updates installed in your machines (see here) and why we cannot rely on documentation, if it exists, to be accurate, especially regarding the status of the machines present in the environment. Now it is time to update this script to BizTalk Server 2016.
Checking what CU is installed is not a difficult task to do, but without a doubt, it is one of the most annoying tasks to do as an administrator, because once again:
- You can do it manually by checking Control Panel\Programs\Programs and Features, then viewing Installed Updates. Try to find them in the list; it can sometimes be very confusing because they are not organized in a category called BizTalk.
- Or rely on tools like BizTalk MsgBoxViewer, which sometimes are not up to date, to check and provide that information.
📝 One-Minute Brief
This post explains how BizTalk administrators can use a simple PowerShell script to quickly identify which BizTalk Server 2016 cumulative updates (CUs) are installed on a server, avoiding manual and error‑prone checks.
There are probably other ways; nevertheless, this simple task should be easy, extremely easy, and fast to do. What you really want to know is what BizTalk Cumulative Updates are installed:
This is the list of BizTalk Cumulative Update installed in this machine: BTS2016LAB01
- Microsoft BizTalk Server 2016 CU1
To check whether the last Cumulative is installed.
PowerShell script overview
So how can we easily automate tasks? and reuse them whenever necessary, while saving significant time for other tasks?
Using PowerShell is a good option. Windows PowerShell is a Windows command-line shell designed especially for system administrators and can be used by BizTalk administrators to help them automate repetitive tasks or tasks that are time-consuming to perform manually.
This is a simple script that allows you to configure the template name of the cumulative updates, which will change from version to version, and will give you the list of all BizTalk Server 2016 cumulative updates installed on your server:
$keyResults = Get-ChildItem -path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ -Recurse -ErrorAction SilentlyContinue | where { $_.Name -match $CUNameTemplate}
foreach($keyItem in $keyResults)
{
if ($keyItem.GetValue("DisplayName") -like "*$CUNameTemplate*")
{
write-host "-" $keyItem.GetValue("DisplayName").ToString().Substring(0,$keyItem.GetValue("DisplayName").ToString().IndexOf(" CU")+4)
}
}
THIS SQL SCRIPT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.
Download
THIS POWERSHELL SCRIPT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.
You can download the source code from GitHub:
Hope you find this helpful! If you liked the content or found it useful and would like to support me in writing more, consider buying (or helping to buy) a Star Wars Lego set for my son.

Hello!
I tried the script but the variable $CUNameTemplate appears to be undefined. Is it possible you didn’t include all the lines when you cut and pasted the script into the blog?
Thanks!
The script in the post is a portion of it, a sample script with the important part. You need to download from TechNet the full script. Please let me know if that worked
Ahh yes. I see now. Thanks! It have tried it and it works great! Nice work!
How to check if Biztalk is installed regardless of the version
The easy way is to add or remove programs and check if BizTalk Server is in the list or use this PowerShell script https://gallery.technet.microsoft.com/scriptcenter/BizTalk-Server-Determine-1e58d689 – I think you need to update to include BTS2016.
The Variable $CUNameTemplate would need to be update if CU is coming with a feature pack in that case it does not consider the CU with feature pack and will give you the old CU installed on your machine