Sergey Nivens - Fotolia
Updated Exchange Online PowerShell module adds reliability, speed
Microsoft assists Exchange Online administrators who rely on PowerShell by reworking the underlying functionality of several cmdlets used to manage the hosted email platform.
PowerShell offers administrators a more flexible and powerful way to perform management activities in Exchange Online. At times, PowerShell is the only way to perform certain management tasks.
But there have been widespread concerns by many Exchange administrators who have not always felt confident in Exchange Online PowerShell's abilities, especially when dealing with thousands of mailboxes and complicated actions. But Microsoft recently released the Exchange Online PowerShell V2 module -- also known as the ExchangeOnlineManagement module -- to reduce potential management issues.
New cmdlets attempt to curb PowerShell problems
Moving the messaging platform to the cloud can frustrate administrators when they attempt to work with the system using remote PowerShell without a reliable connection to Microsoft's hosted email system. Microsoft said the latest Exchange Online PowerShell module, version 0.3582.0, brings new enhancements and new cmdlets to alleviate performance and reliability issues, such as session timeouts or poor error handling during complex operations.
Where a spotty connection could cause errors or scripts to fail with the previous module, Microsoft added new cmdlets in the Exchange Online PowerShell V2 module to restart and attempt to run a script where it left off before issues started.
Microsoft added 10 new cmdlets in the new Exchange Online PowerShell module. One new cmdlet, Connect-ExchangeOnline, replaces two older cmdlets: Connect-EXOPSSession and New-PSSession.
Microsoft took nine additional cmdlets in the older module, updated them to use REST APIs and gave them new names using the EXO prefix:
- Get-EXOMailbox
- Get-EXORecipient
- Get-EXOCASMailbox
- Get-EXOMailboxPermission
- Get-EXORecipientPermission
- Get-EXOMailboxStatistics
- Get-EXOMailboxFolderStatistics
- Get-EXOMailboxFolderPermission
- Get-EXOMobileDeviceStatistics
Microsoft said the new REST-based cmdlets will perform significantly better and faster than the previous PowerShell module. The REST APIs offer a more stable connection to the Exchange Online back end, making most functions more responsive and able to operate in a stateless session.
Given that administrators will develop complex PowerShell scripts for their management needs, they needed more stability from Microsoft's end to ensure these tasks will execute properly. Microsoft helped support those development efforts by introducing better script failure with functionality that will retry and resume from the point of failure. Previously, the only option for administrators was to rerun their scripts and hope it worked the next time.
There are cases where some properties are queried during a script execution that can generally impact the overall response and performance of the script given the size of the objects and their properties. To help optimize these scenarios, Microsoft introduced a way for a PowerShell process to run against Exchange Online to only retrieve relevant properties of objects needed during the execution process. An example would be retrieving mailbox properties that would be the most likely to be used, such as mailbox statistics, identities and quotas.
Microsoft removed the need to use the Select parameter typically used to determine which properties are needed as part of the result set. This neatens scripts and eliminates unnecessary syntax as shown in the example below.
Before:
Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox | Select WhenCreated, WhenChanged | Export-CSV c:\temp\ExportedMailbox.csv
After:
Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -PropertySets Quota -Properties WhenCreated, WhenChanged | Export-CSV c:\temp\ExportedMailbox.csv
How to get the new Exchange Online PowerShell module
To start using the latest Exchange Online PowerShell capabilities requires the installation or upgrade of the ExchangeOnlineManagement module. This can be done from a PowerShell prompt running under administrator settings and executing one of the two following commands:
Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement; Get-Module ExchangeOnlineManagement
Or:
Update-Module -Name ExchangeOnlineManagement
Exchange Online PowerShell V2 module commands offer speed boost
IT pros who use the new Exchange Online PowerShell module should see improved performance and faster response time.
We can run a short test to compare how the current version stacks up to the previous version when we run commands that provide the same type of information.
First, let's run the following legacy command to retrieve mailbox information from an organization:
Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox | Select DisplayName, ProhibitSendReceiveQuota, WhenCreated, WhenChanged
The command completes in 2.3890 seconds.
This is the new version of the command that provides same set of information but in a slightly different format:
$RESTResult = Measure-Command { $Mbx = Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -PropertySets Quota -Properties WhenCreated, WhenChanged
The command completes in 1.29832 seconds, or almost half the time. Extrapolate these results to an organization with many thousands of users and mailboxes in Exchange Online and you can begin to see the benefit when a script takes half as much time to run.
Use the following command to get mailbox details for users in the organization:
Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -PropertySets Quota -Properties WhenCreated, WhenChanged
The following command exports a CSV file with details of mailboxes with additional properties listed:
Get-ExoMailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox -PropertySets Quota -Properties WhenCreated, WhenChanged | Export-CSV c:\temp\ExportedMailbox.csv
Be aware of the Exchange Online PowerShell module provisions
There are several caveats Exchange administrators should know before they use the latest ExchangeOnlineManagement module:
- The new Exchange PowerShell Online module only works on Windows PowerShell 5.1 with support coming for the new cross-platform version of PowerShell.
- Data results returned by the latest cmdlets are in alphabetic order, not chronologically.
- The new module only supports OAuth 2.0 authentication, but the client machine will need basic authorization enabled to use the older remote PowerShell cmdlets.
- Some results may require additional formatting or adjusting because the new cmdlets give output alphabetically.
- Administrators should use Azure AD GUID for account identity.
How to give Microsoft feedback for additional development
As Microsoft continues to improve the module, administrators will continue to see more capabilities that will allow them to have a much more improved experience with PowerShell to manage their Exchange Online environment.
There are three avenues for users to provide feedback to Microsoft on the new PowerShell commands. The first one is to report bugs or other issues during the processing of the different scripts from within PowerShell. To do this, run the following command:
Connect-ExchangeOnline -EnableErrorReporting -LogDirectoryPath <Path to store log file> -LogLevel All
The second option is to post a message on the Office 365 UserVoice forum.
Lastly, users can file an issue or check on the status of one with the Exchange Online PowerShell commands on the Microsoft Docs Github site at this link.