Microsoft advisory MC1197103 brought renewed attention to something many Exchange Online tenants quietly accumulated over the years: old Exchange ActiveSync (EAS) clients that never really went away.
In many environments, ActiveSync devices were configured years ago, synced once or twice, and then forgotten. As long as they kept working, nobody cared too much about the exact client version running on the device – MC1197103 changed that mindset.
Once Microsoft started enforcing stricter requirements for supported EAS client versions, administrators suddenly needed a reliable way to identify devices running outdated client versions, ideally with enough context to decide what to do next.
That is exactly the gap this script is meant to fill.
Why the Portal Isn’t Enough
You can find mobile devices in the Exchange admin center.
You can filter and sort them manually.
But when you need to answer questions like:
- Which users still have EAS devices older than version 16.1?
- How many of these devices are still actively syncing?
- Which mailboxes are affected?
- Do we need to clean them up, block them, or simply notify users?
…the GUI quickly becomes inefficient.
This is where PowerShell still does the heavy lifting.
Why This Is Useful After MC1197103
MC1197103 is not just about blocking old clients — it’s about visibility and informed decisions.
With this report you can:
- Identify users affected by upcoming or recent EAS enforcement changes
- Spot devices that haven’t synced in months (or years)
- Decide whether devices should be:
- Provide concrete evidence when explaining the issue to security or endpoint teams
In short: you get facts, not guesses.
Examples
Default run (minimum client version 16.1)
|
1 |
.\Exchange-Report-EASDevices-OlderClientVersion.ps1 |
Exports all EAS devices running a client version older than 16.1 to a CSV file.
Change the minimum supported client version
|
1 |
.\Exchange-Report-EASDevices-OlderClientVersion.ps1 -MinClientVersion 16.2 |
Useful if Microsoft updates the supported baseline again.
Quick on-screen validation
|
1 |
.\Exchange-Report-EASDevices-OlderClientVersion.ps1 -Top 20 |
Prints the first 20 matching devices to the console while still exporting the full report to CSV.
Interpreting the Results
A few columns are especially important when reviewing the output:
- ClientVersion – confirms whether the device falls below the supported threshold
- LastSuccessSync – helps determine if the device is still actively used
- DeviceUserAgent – often reveals what kind of client is actually connecting
- PrimarySmtpAddress – makes it easy to identify and contact affected users
In many tenants, you’ll discover that a large portion of “legacy” devices are no longer in active use which makes cleanup decisions much easier.
Script Source
Complete script as always is available for download on Azure365Addict GitHub.
Feel free to customize the script to fit your specific needs and improve your Exchange Online hygiene.
If you have any questions or want to extend this into automated cleanup or reporting, feel free to reach out.
Happy scripting!


Hi Marcin, is there any property available for last connected state?
Hi Anindya,
In Exchange Online there isn’t a real “currently connected” / live connection state exposed for EAS devices. The closest indicator you can use is LastSuccessSync. Keep in mind that LastSuccessSync is very often empty, especially for legacy or inactive devices, devices blocked by policy, or objects that were never able to complete a successful sync. In practice this is expected behavior.
In my script I already treat LastSuccessSync as a “last seen” indicator when it’s available.
Thanks, Mercin for the detailed explanation. So, it is safe to ignore all the empty records with empty LastSuccessSync, correct?
Yes, that’s the safest approach.
If an EAS device has an empty LastSuccessSync, I’d recommend reviewing it before deletion, especially if there is an active user behind it.
In most cases these are stale or never used records.
If a device is still active, it will re-register automatically after removal but checking first keeps the cleanup predictable.