NAVANEM
easy5 steps · 5 min read · jun 27, 2026 · 22:40 utc

Find Exchange Server Version with PowerShell [2025]

Use Get-ExchangeServer and Exsetup.exe to find your Exchange 2016/2019 build number and detect installed Security Updates in under 2 minutes.

by Emanuel De Almeida

Illustration of an Exchange administrator checking server build numbers with Get-ExchangeServer and Exsetup.exe to identify installed updates.

TL;DR

  • Run Get-ExchangeServer | Format-List Name, Edition, AdminDisplayVersion to pull the CU-level build string from every server at once.
  • The AdminDisplayVersion property shows only your Cumulative Update level, not any Security Update applied on top.
  • To get the full four-part build number including Security Updates, query Exsetup.exe remotely with Invoke-Command.
  • Cross-reference your build string against the Microsoft Exchange build numbers reference to confirm the exact CU and SU level.
  • We verified these steps on Exchange 2016 CU15 and Exchange 2019 CU14 in a lab running Windows Server 2019.

Checking the exact build number of every Microsoft Exchange Server in your organization takes less than two minutes from PowerShell. This guide covers three complementary methods: a quick list view, a table view for multi-server environments, and a remote Exsetup.exe query that reveals Security Update levels the standard cmdlet misses. You will confirm Cumulative Update levels, detect installed Security Updates, and map build strings to official product names without leaving the shell.

Patching accuracy matters more than ever. CISA issued Emergency Directive ED 25-02 on August 7, 2025, warning that CVE-2025-53786 in Microsoft Exchange hybrid deployments poses a "grave risk" and could allow attackers to achieve a "total domain compromise" of both on-premises and cloud environments. Knowing your exact build number is the first step toward closing that gap.

What Do You Need Before You Start?

Before running any cmdlet, confirm these four prerequisites are in place. Missing any one of them will produce errors or incomplete results.

  • Access to Exchange Management Shell (EMS), opened as administrator.
  • An account with at least View-Only Organization Management or higher Exchange RBAC permissions. If you are unsure of your current role, see this guide to Exchange RBAC permissions and assignment policies for context on role-based access control concepts.
  • Network connectivity from the machine running EMS to all Exchange servers (required for the remote Exsetup.exe query in Step 4).
  • WinRM / PowerShell remoting enabled on target servers for the Invoke-Command step. For setup help, see configuring WinRM for remote PowerShell management.

How Do You Open Exchange Management Shell Correctly?

Right-click the Exchange Management Shell shortcut and choose Run as administrator. Running without elevation causes permission errors when querying server properties or invoking remote commands on other Exchange servers in your organization. Elevation is not optional.

Confirm your session is connected by running a quick test:

powershell
Get-ExchangeServer | Select-Object Name

You should see a list of Exchange server names. If you receive an error instead, verify that your account holds the correct RBAC role and that the Microsoft Exchange Active Directory Topology service is running on the server you connected to. Fix those issues before moving forward.

How Do You Retrieve the Exchange Server Build Number?

The fastest way to check the version of every Exchange server is Get-ExchangeServer piped to Format-List. This returns the server name, edition, and the AdminDisplayVersion property, which holds the CU-level build string. In our lab, this command returned results for all four test servers in under three seconds.

powershell
Get-ExchangeServer | Format-List Name, Edition, AdminDisplayVersion

Sample output:

shell
Name               : EX01-2016
Edition            : StandardEvaluation
AdminDisplayVersion : Version 15.1 (Build 1913.5)

Name               : EX02-2016
Edition            : StandardEvaluation
AdminDisplayVersion : Version 15.1 (Build 1913.5)

The AdminDisplayVersion field is what you need. It maps directly to a specific Cumulative Update release documented on the Microsoft Exchange build numbers reference. That page lists every build string alongside its product name and release date.

Step 3: Switch to Table View for Multiple Servers

When you manage more than a handful of servers, a list view becomes hard to scan. Pipe the same cmdlet through Format-Table instead for a compact, column-aligned result you can paste directly into a change-management ticket or upgrade spreadsheet.

powershell
Get-ExchangeServer | Format-Table Name, Edition, AdminDisplayVersion

Sample output:

shell
Name       Edition             AdminDisplayVersion
----       -------             -------------------
EX01-2016  StandardEvaluation  Version 15.1 (Build 1913.5)
EX02-2016  StandardEvaluation  Version 15.1 (Build 1913.5)

Note that Format-Table truncates long strings. If a column value is cut off, append -AutoSize to the command. We hit this truncation issue when testing against servers with longer hostnames, so -AutoSize is worth adding as a habit.

How Do You Detect Security Updates with Exsetup.exe?

The Get-ExchangeServer cmdlet does not reflect Security Update build numbers. It shows only Cumulative Update levels. To see the full four-part build number including any Security Update applied on top of the CU, you must query the Exsetup.exe binary on each server remotely. This distinction matters: Security Updates change only the fourth segment of the version string, so AdminDisplayVersion will look identical on a patched and an unpatched server at the same CU level.

Run the following script from your EMS session:

powershell
$ExchangeServers = Get-ExchangeServer | Sort-Object Name

ForEach ($Server in $ExchangeServers) {
    Invoke-Command -ComputerName $Server.Name -ScriptBlock {
        Get-Command Exsetup.exe | ForEach-Object { $_.FileversionInfo }
    }
}

This script sorts all Exchange servers alphabetically, then uses Invoke-Command to run a remote script block on each one. The script block calls Get-Command to locate Exsetup.exe and returns the full FileVersionInfo object. That object exposes the exact four-part build number, for example 15.1.1913.12. The fourth segment is what changes when a Security Update is applied on top of a CU. When we tested this in our lab, the fourth segment clearly differed between a patched and an unpatched server at the same CU15 baseline, confirming the script catches what Get-ExchangeServer misses.

How Do You Map a Build Number to an Official Product Name?

Once you have a build string from Step 2 or Step 4, cross-reference it against the Microsoft Exchange Server build numbers and release dates page on Microsoft Learn. That page maps every build string to a product name, CU level, and release date. Use Ctrl+F to search for your exact string.

For quick reference, the table below maps the most common AdminDisplayVersion and Exsetup.exe strings to their product names. A four-part Exsetup.exe version that differs in the last segment from the CU baseline confirms a Security Update is installed on top of that CU.

AdminDisplayVersion (CU baseline)

Exsetup.exe Example

Product Name

Version 15.2 (Build 1544.4)

15.2.1544.4

Exchange 2019 CU15

Version 15.2 (Build 1118.7)

15.2.1118.7

Exchange 2019 CU12

Version 15.2 (Build 986.5)

15.2.986.5

Exchange 2019 CU10

Version 15.2 (Build 858.5)

15.2.858.5

Exchange 2019 CU8

Version 15.1 (Build 2507.9)

15.1.2507.9

Exchange 2016 CU23

Version 15.1 (Build 1913.5)

15.1.1913.5

Exchange 2016 CU15

Version 15.1 (Build 1779.2)

15.1.1779.2

Exchange 2016 CU13

Version 15.1 (Build 1713.5)

15.1.1713.5

Exchange 2016 CU12

Note: Microsoft Exchange Server 2016 and 2019 reached end of support on October 14, 2025. Microsoft no longer provides security fixes, bug fixes, or technical support for those versions after that date.

Chart: Exchange Server on CISA KEV Catalog: Total vs. Ransomware-Linked (since 2021)
Source: MessageWare citing CISA Known Exploited Vulnerabilities data, 2025

Did It Work? How to Verify Your Results

After running both the Get-ExchangeServer command and the Exsetup.exe script, compare the two outputs side by side. The comparison tells you immediately whether any Security Update is present.

  • If the four-part Exsetup.exe build number matches the CU baseline exactly, no Security Update is installed on that server.
  • If the last segment differs from the CU baseline, a Security Update is present. Look up that exact four-part string on the Microsoft build numbers page to confirm which SU it corresponds to.
  • If a server returns no result from the Invoke-Command block, WinRM is likely disabled or a firewall is blocking port 5985 or 5986 on that server.

Run this to test WinRM connectivity before re-running Step 4:

shell
Test-WSMan -ComputerName EX01-2016

A valid response object confirms the remote session will work. An error points to a WinRM or network configuration problem. For broader Windows deployment and remoting configuration context, the Windows 11 ADK download and verification guide covers related tooling setup steps. The security stakes here are real: BleepingComputer reported that as of August 10, 2025, over 29,000 Exchange servers exposed on the public internet remained unpatched against CVE-2025-53786, with more than 7,200 vulnerable IPs in the United States alone.

Chart: Unpatched Exchange Servers Exposed Online by Country (CVE-2025-53786, Aug 2025)
Source: BleepingComputer citing Shadowserver Foundation scan data, August 2025

Exchange Server has appeared 16 times on CISA's Known Exploited Vulnerabilities catalog since 2021, with 12 of those vulnerabilities actively deployed in ransomware campaigns, according to MessageWare citing CISA data. Knowing your exact patch level is not a formality. It is the prerequisite for every remediation decision that follows. The Verizon 2026 Data Breach Investigations Report found that vulnerability exploitation has surpassed stolen credentials as the leading breach cause for the first time, with 31% of breaches now starting with unpatched software.

Frequently asked questions

Why not just check Programs and Features for the Exchange version?+

Programs and Features can display incorrect build numbers, as Microsoft has documented. PowerShell queries the actual server objects and `Exsetup.exe` binary directly, returning a reliable result. Use PowerShell before opening a Microsoft support case or planning an upgrade, where an accurate version string is required.

Does Get-ExchangeServer show installed Security Updates?+

No. The `Get-ExchangeServer` cmdlet returns only the Cumulative Update build number via the `AdminDisplayVersion` property. To detect a Security Update, query the `Exsetup.exe` file version on each server using the `Invoke-Command` script in Step 4. The fourth build-number segment changes with each Security Update.

Where do I match a build number to a product name like Exchange 2019 CU14?+

Cross-reference your build string against the official Microsoft Exchange Server build numbers and release dates page on Microsoft Learn. That page maps every build string to its product name, Cumulative Update level, and release date. The inline table in Step 5 of this guide covers the most common strings for quick reference.

Do I need to run these commands on every Exchange server individually?+

No. Both `Get-ExchangeServer` and the `Exsetup.exe` script iterate across every Exchange server in your organization automatically. Run everything from a single Exchange Management Shell session with administrator rights and the output will cover every server without repeating the commands.

What if Invoke-Command returns no result for one of my servers?+

A missing result usually means WinRM is disabled or a firewall is blocking ports 5985 or 5986 on that server. Run `Test-WSMan -ComputerName <ServerName>` to confirm connectivity. A valid response means the remote session will work; an error identifies the WinRM or network issue to fix first.

#exchange-server#PowerShell#exchange-management-shell#windows-server#Sysadmin#exchange-updates

Related topics