The EXO V3 PowerShell module (ExchangeOnlineManagment) was released on September 19th, 2022.
The EXO V3 is the general availability release of the REST-based PowerShell API to manage Exchange Online.
Let’s have a closer look at what’s new with this update. And what sucks…
Exchange Online REST API
The most important feature of EXO V3 is that EXO PowerShell CmdLets are now running as REST API calls instead of running via a remote PowerShell session.
The most obvious benefit is that you can now finally disable basic authentication on WinRM.
The remote PowerShell session used by previous versions of the EXO PowerShell module required basic authentication of WinRM.
You can check the status of WinRM authentication using the following command:
PS C:\> & winrm get winrm/config/client/auth Auth Basic = true Digest = true Kerberos = true Negotiate = true Certificate = true CredSSP = false
To disable basic authentication on WinRM use the following command:
PS C:\> & winrm set winrm/config/client/auth '@{Basic="false"}' Auth Basic = false Digest = true Kerberos = true Negotiate = true Certificate = true CredSSP = false
EXO V3 Smells Like a Beta
Great news that EXO PowerShell is now using production-ready REST API calls.
Or is it…?
If we take a closer look, we’ll find that the REST API used by the EXO V3 general availability release is STILL IN BETA:
PS C:\> Get-Mailbox Lene.Hau -Verbose
VERBOSE: Computed version info: 3.0.0
VERBOSE: POST https://outlook.office365.com/adminapi/beta/8a35f394-855d-4d13-9f6f-86d8eb24dc6b/InvokeCommand with -1-byte payload
VERBOSE: received 4947-byte response of content type application/json;charset=utf-8
Name Alias Database ProhibitSendQuota ExternalDirectoryObjectId
---- ----- -------- ----------------- -------------------------
Lene Hau lene.hau EURPR09DG188-db035 99 GB (106,300,44... 97d3bc7f-8ee6-4974-9115-c33087ad5600
EXO V3 is calling a BETA API – a huge disappointment…
This raises a suspicion that someone ordered the Exchange Online PowerShell team to release EXO V3 even though the Exchange Online REST API is still not production ready.
Another fact that supports this concern is that the Connect-ExchangeOnline CmdLet triggers a download of a PowerShell module with all the basic Exchange Online CmdLets:
PS C:\> Connect-ExchangeOnline
----------------------------------------------------------------------------------------
This V3 EXO PowerShell module contains new REST API backed Exchange Online cmdlets which
doesn't require WinRM for Client-Server communication. You can now run these cmdlets after
turning off WinRM Basic Auth in your client machine thus making it more secure.
Unlike the EXO* prefixed cmdlets, the cmdlets in this module support full functional
parity with the RPS (V1) cmdlets.
V3 cmdlets in the downloaded module are resilient to transient failures, handling retries
and throttling errors inherently.
However, REST backed EOP and SCC cmdlets are not available yet. To use those, you will
need to enable WinRM Basic Auth.
For more information check https://aka.ms/exov3-module
----------------------------------------------------------------------------------------
PS C:\> Get-Command Get-Mailbox | ft -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Function Get-Mailbox 1.0 tmpEXO_ws2oodie.yfi
PS C:\> Get-Module tmpEXO_ws2oodie.yfi | fl
Name : tmpEXO_ws2oodie.yfi
Path : C:\Users\Admin\AppData\Local\Temp\tmpEXO_ws2oodie.yfi\tmpEXO_ws2oodie.yfi.psm1
Description : This is a Powershell module generated by using the AutoGEN infra.
ModuleType : Script
Version : 1.0
NestedModules : {}
ExportedFunctions : {Add-AvailabilityAddressSpace, Add-DistributionGroupMember, Add-MailboxFolderPermission, Add-MailboxLocation...}
ExportedCmdlets :
ExportedVariables : HelpFileNames
ExportedAliases :
As seen in the above output, the module “tmpEXO_ws2oodie.yfi” (almost 30 MB!) has been downloaded to the temp folder and contains all the standard ExchangeOnline CmdLets (except Connect-ExchangeOnline).
You will download a new temp module every time you connect to Exchange Online.
When you disconnect from ExchangeOnline, the temp module is deleted again. But if you don’t explicitly disconnect, then your temp folder will build up with these 30 MB modules.
Why not include everything in the ExchangeOnlineManagement module? It’s not very good for performance to download a 27.8 MB module every time you start an Exchange Online PowerShell session!
The reason behind this crazy design is most likely that Microsoft is still planning breaking changes for the Exchange Online REST API. The only way for the EXO V3 module to handle this is to download a new module package on every session in case some CmdLets need to be updated.
We’re not impressed…
EXO V3 is a Huge Disappointment
The conclusion from the above findings is that the EXO V3 is a terrible workaround to make a premature release of an API wrapper (EXO V3) built on an API (Exchange Online REST API) that is still not production ready.
The EXO V3 commands have the same syntax as the EXO V2 CmdLets, so there’s not much reason to hold back if you’re dying to get rid of basic WinRM authentication.
But for application developers, EXO V3 and the Exchange Online REST API are a huge disappointment.