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.
