Update: The old blog post has been updated to the following below:-
I have updated the article to include a PowerShell script that will give you all the information you need displayed in a Grid.
This script can be modified to add more build information which I will update overtime but includes CU23 for now. This is for Exchange 2016 Server Only and I will be doing the same for Exchange Server 2019.
Below is the output from the script:
Script:
Here is the script that I will update overtime to include all the other CU’s etc.
# Import the Exchange module
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
# Define a hashtable with build numbers and corresponding product names
$buildInfoTable = @{
"15.01.2507.039" = "Exchange Server 2016 CU23 Apr24HU";
"15.01.2507.037" = "Exchange Server 2016 CU23 Mar24SU";
"15.01.2507.035" = "Exchange Server 2016 CU23 Nov23SU";
"15.01.2507.034" = "Exchange Server 2016 CU23 Oct23SU";
"15.01.2507.032" = "Exchange Server 2016 CU23 Aug23SUv2";
"15.01.2507.031" = "Exchange Server 2016 CU23 Aug23SU";
"15.01.2507.027" = "Exchange Server 2016 CU23 Jun23SU";
"15.01.2507.023" = "Exchange Server 2016 CU23 Mar23SU";
"15.01.2507.021" = "Exchange Server 2016 CU23 Feb23SU";
"15.01.2507.017" = "Exchange Server 2016 CU23 Jan23SU";
"15.01.2507.016" = "Exchange Server 2016 CU23 Nov22SU";
"15.01.2507.013" = "Exchange Server 2016 CU23 Oct22SU";
"15.01.2507.012" = "Exchange Server 2016 CU23 Aug22SU";
"15.01.2507.009" = "Exchange Server 2016 CU23 May22SU";
"15.01.2507.006" = "Exchange Server 2016 CU23 (2022H1)";
}
# Function to get product name based on build number
function Get-ProductName($buildNumber) {
if ($buildInfoTable.ContainsKey($buildNumber)) {
$buildInfoTable[$buildNumber]
} else {
"Unknown Product"
}
}
$ExchangeServers = Get-ExchangeServer | Sort-Object Name
# Create an array to store the results
$results = @()
foreach ($Server in $ExchangeServers) {
$serverName = $Server.Name
$edition = $Server.Edition
# Get Exchange version using Invoke-Command
$version = Invoke-Command -ComputerName $Server.Name -ScriptBlock {
Get-Command Exsetup.exe | ForEach-Object { $_.FileVersionInfo.FileVersion }
}
# Get product name from the local table
$productName = Get-ProductName $version
# Create a custom object with the information
$resultObject = [PSCustomObject]@{
ServerName = $serverName
Edition = $edition
Version = $version
ProductName = $productName
}
# Add the result object to the results array
$results += $resultObject
}
# Display the results in a grid
$results | Out-GridView
It takes a few seconds/minutes to run, all depending on the number of servers it has to query.
Hope it helps.