About the Exchange Online PowerShell module

The Exchange Online PowerShell module uses modern authentication and works with multi-factor authentication (MFA) for connecting to all Exchange-related PowerShell environments in Microsoft 365: Exchange Online PowerShell, Security & Compliance PowerShell, and standalone Exchange Online Protection (EOP) PowerShell.

Note

Version 2.0.5 and earlier is known as the Exchange Online PowerShell V2 module (abbreviated as the EXO V2 module). Version 3.0.0 and later is known as the Exchange Online PowerShell V3 module (abbreviated as the EXO V3 module).

For connection instructions using the module, see the following articles:

The rest of this article explains how the module works, how to install and maintain the module, and the optimized Exchange Online cmdlets that are available in the module.

Updates for version 3.0.0 (the EXO V3 module)

Versions 3.0.0 is the General Availability (GA) release of the 2.0.6-PreviewX versions of the module, and is now known as the EXO V3 module. This version improves upon the historical capabilities of the EXO V2 module (version 2.0.5 and earlier) with the following features:

  • Certificate based authentication (also known as CBA or app-only authentication) is available for Security & Compliance PowerShell.

  • Cmdlets backed by the REST API are available in Exchange Online PowerShell. REST API cmdlets have the following advantages over their historical counterparts:

    • More secure: REST API cmdlets have built-in support for modern authentication and don't rely on the remote PowerShell session, so PowerShell on your client computer doesn't need Basic authentication in WinRM for Exchange Online PowerShell.
    • More reliable: REST API cmdlets handle transient failures with built-in retries, so failures or delays are minimized. For example:
      • Failures due to network delays.
      • Delays due to large queries that take a long time to complete.
    • Better performance: The connection avoids setting up a PowerShell runspace in Exchange Online PowerShell.

    The benefits of REST API cmdlets in Exchange Online PowerShell are described in the following table:

      Remote PowerShell cmdlets Get-EXO* cmdlets REST API cmdlets
    Security Least secure Highly secure Highly secure
    Performance Low performance High performance Medium performance
    Reliability Least reliable Highly reliable Highly reliable
    Functionality All parameters and output properties available Limited parameters and output properties available All parameters and output properties available

    Note

    Currently, no cmdlets in Security & Compliance PowerShell cmdlets are backed by the REST API. All cmdlets in Security & Compliance PowerShell still rely on the remote PowerShell session, so PowerShell on your client computer requires Basic authentication in WinRM to successfully use the Connect-IPPSSession cmdlet.

    • REST API cmdlets in Exchange Online PowerShell have the same cmdlet names and work just like their remote PowerShell equivalents, so you don't need to update any of your scripts.

    • Virtually all of the available remote PowerShell cmdlets in Exchange Online are now backed by the REST API.

  • The UseRPSSession switch in Connect-ExchangeOnline grants access to all existing remote PowerShell cmdlets in Exchange Online PowerShell:

    • The UseRPSSession switch requires Basic authentication in WinRM on your client computer.
    • If you don't use the UseRPSSession switch when you connect to Exchange Online PowerShell, you can use only the REST API cmdlets.
  • A few REST API cmdlets in Exchange Online PowerShell have been updated with the experimental UseCustomRouting switch. This switch routes the command directly to the required Mailbox server, and might improve overall performance.

    • When you use the UseCustomRouting switch, you can use only the following values for identity of the mailbox:

      • User principal name (UPN)
      • Email address
      • Mailbox GUID
    • The UseCustomRouting switch is available only on the following REST API cmdlets in Exchange Online PowerShell:

      • Get-Clutter
      • Get-FocusedInbox
      • Get-InboxRule
      • Get-MailboxAutoReplyConfiguration
      • Get-MailboxCalendarFolder
      • Get-MailboxFolderPermission
      • Get-MailboxFolderStatistics
      • Get-MailboxMessageConfiguration
      • Get-MailboxPermission
      • Get-MailboxRegionalConfiguration
      • Get-MailboxStatistics
      • Get-MobileDeviceStatistics
      • Get-UserPhoto
      • Remove-CalendarEvents
      • Set-Clutter
      • Set-FocusedInbox
      • Set-MailboxRegionalConfiguration
      • Set-UserPhoto

      Use the UseCustomRouting switch experimentally and report any issues that you encounter.

  • Use the Get-ConnectionInformation cmdlet to get information about REST-based connections to Exchange Online PowerShell. This cmdlet is required because the Get-PSSession cmdlet in Windows PowerShell doesn't return information for REST-based connections.

    Scenarios where you can use Get-ConnectionInformation are described in the following table:

    Scenario Expected output
    Run before a Connect-ExchangeOnline command. Returns nothing.
    Run after Connect-ExchangeOnline command that uses the UseRPSSession switch. Returns nothing (use Get-PSSession).
    Run after a REST-based Connect-ExchangeOnline command (no UseRPSSession switch). Returns one connection information object.
    Run after multiple REST-based Connect-ExchangeOnline commands. Returns a collection of connection information objects.
    Run after multiple Connect-ExchangeOnline commands with and without the UseRPSSession switch. Returns one connection information object for each REST-based session.
  • Use the SkipLoadingFormatData switch on the Connect-ExchangeOnline cmdlet in REST-based connections (you didn't use the UseRPSSession switch) to avoid loading format data and to run Connect-ExchangeOnline commands faster.

For additional information, see the Release notes section later in this article.

For information about switching from the older Exchange Online Remote PowerShell Module (V1) to the current release, see this blog post.

Report bugs and issues for the Exchange Online PowerShell module

Note

For GA versions of the module, open a support ticket for any problems that you're having. For Preview versions of the module, use the email address as described in this section. You can also use the email address for feedback and suggestions for both GA and Preview versions of the module.

When you report an issue at exocmdletpreview[at]service[dot]microsoft[dot]com, be sure to include the log files in your email message. To generate the log files, replace <Path to store log file> with the output folder you want, and run the following command:

Connect-ExchangeOnline -EnableErrorReporting -LogDirectoryPath <Path to store log file> -LogLevel All

Note

Frequent use of the Connect-ExchangeOnline and Disconnect-ExchangeOnline cmdlets in a single PowerShell session or script might lead to a memory leak. The best way to avoid this issue is to use the CommandName parameter on the Connect-ExchangeOnline cmdlet to limit the cmdlets that are used in the session.

Cmdlets in the Exchange Online PowerShell module

All versions of the module contain nine exclusive Get-EXO* cmdlets for Exchange Online PowerShell that are optimized for speed in bulk data retrieval scenarios (thousands and thousands of objects). The older related remote PowerShell cmdlets are still available.

The improved Exchange Online PowerShell cmdlets that are available only in the module are listed in the following table:

EXO module cmdlet Older related cmdlet
Get-EXOMailbox Get-Mailbox
Get-EXORecipient Get-Recipient
Get-EXOCasMailbox Get-CASMailbox
Get-EXOMailboxPermission Get-MailboxPermission
Get-EXORecipientPermission Get-RecipientPermission
Get-EXOMailboxStatistics Get-MailboxStatistics
Get-EXOMailboxFolderStatistics Get-MailboxFolderStatistics
Get-EXOMailboxFolderPermission Get-MailboxFolderPermission
Get-EXOMobileDeviceStatistics Get-MobileDeviceStatistics

The connection-related cmdlets in the module are listed in the following table:

EXO module cmdlet Older related cmdlet Comments
Connect-ExchangeOnline Connect-EXOPSSession
or
New-PSSession
Connect-IPPSSession Connect-IPPSSession
Disconnect-ExchangeOnline Remove-PSSession
Get-ConnectionInformation Get-PSSession Available in v2.0.6-Preview7 or later.

Miscellaneous Exchange Online cmdlets that happen to be in the module are listed in the following table:

Cmdlet Comments
Get-CustomNudge Available in v2.0.6-Preview5 or later
New-CustomNudge Available in v2.0.6-Preview5 or later
Remove-CustomNudge Available in v2.0.6-Preview5 or later
Set-CustomNudge Available in v2.0.6-Preview5 or later
Get-CustomNudgeAssignment Available in v2.0.6-Preview5 or later
New-CustomNudgeAssignment Available in v2.0.6-Preview5 or later
Remove-CustomNudgeAssignment Available in v2.0.6-Preview5 or later
Set-CustomNudgeAssignment Available in v2.0.6-Preview5 or later
Get-CustomNudgeSettings Available in v2.0.6-Preview5 or later
Set-CustomNudgeSettings Available in v2.0.6-Preview5 or later
Get-MyAnalyticsFeatureConfig Available in v2.0.4 or later.
Set-MyAnalyticsFeatureConfig Available in v2.0.4 or later.
Get-UserBriefingConfig Replaced by Get-MyAnalyticsFeatureConfig.
Set-UserBriefingConfig Replaced by Set-MyAnalyticsFeatureConfig.
Get-VivaInsightsSettings Available in v2.0.5 or later.
Set-VivaInsightsSettings Available in v2.0.5 or later.

Install and maintain the Exchange Online PowerShell module

You download the module from the PowerShell gallery at https://www.powershellgallery.com/packages/ExchangeOnlineManagement/.

The procedures in this section explain how to install, update, and uninstall the module.

Supported operating systems for the Exchange Online PowerShell module

The latest versions of the module are officially supported in PowerShell 7 on Windows, Linux, and Apple macOS.

Specifically, version 2.0.4 or later is supported in PowerShell 7.0.3 or later.

For more information about PowerShell 7, see Announcing PowerShell 7.0.

Apple macOS

The module is supported in the following versions of macOS:

  • macOS 11 Big Sur or later
  • macOS 10.15 Catalina
  • macOS 10.14 Mojave

For instructions on installing PowerShell 7 on macOS, see Installing PowerShell on macOS.

Note

As described in the installation article, you need to install OpenSSL, which is required for WSMan.

After you install PowerShell 7 and OpenSSL, do the following steps:

  1. Run PowerShell as superuser: sudo pwsh

  2. In the PowerShell superuser session, run the following commands:

    Install-Module -Name PSWSMan
    
    Install-WSMan
    

    If prompted, accept PSGallery as the source for the cmdlets.

Now you can do the regular PowerShell prerequisites and install the Exchange Online PowerShell module.

Linux

The module is officially supported in the following distributions of Linux:

  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS

If you have trouble using the module in other distributions of Linux, report any issues.

For instructions on installing PowerShell 7 on Linux, see Installing PowerShell on Linux.

After you install PowerShell 7, do the following steps:

  1. Run PowerShell as superuser: sudo pwsh

  2. In the PowerShell superuser session, run the following commands:

    Install-Module -Name PSWSMan
    
    Install-WSMan
    

    If prompted, accept PSGallery as the source for the cmdlets.

Now you can do the regular PowerShell prerequisites and install the Exchange Online PowerShell module.

Note

If you connect to Exchange Online PowerShell from a network that's behind a proxy server, the EXO V2 module (version v2.0.5 or earlier) doesn't work in Linux. You need to use the EXO V3 module (v3.0.0 or v2.0.6-PreviewX) in Linux to connect from a network that's behind a proxy server.

Windows

All versions of the module are supported in Windows PowerShell 5.1.

PowerShell 7 on Windows requires version 2.0.4 or later.

Version 2.0.5 or later of the module requires the Microsoft .NET Framework 4.7.1 or later to connect. Otherwise, you'll get an System.Runtime.InteropServices.OSPlatform error. This requirement shouldn't be an issue in current versions of Windows. For more information about versions of Windows that support the .NET Framework 4.7.1, see this article.

Windows PowerShell requirements and module support in older versions of Windows are described in the following list:

  • Windows 8.11

  • Windows Server 2012 or Windows Server 2012 R21

  • Windows 7 Service Pack 1 (SP1)2,3,4

  • Windows Server 2008 R2 SP12,3,4

  • 1 PowerShell 7 on this version of Windows requires the Windows 10 Universal C Runtime (CRT).

  • 2 This version of Windows has reached its end of support, and is now supported only in Azure virtual machines.

  • 3 This version of Windows supports only v2.0.3 or earlier versions of the module.

  • 4 Windows PowerShell 5.1 on this version of Windows requires the .NET Framework 4.5 or later and the Windows Management Framework 5.1. For more information, see Windows Management Framework 5.1.

Prerequisites for the Exchange Online PowerShell module

Note

The settings described in this section are required in all versions of PowerShell on all operating systems.

Set the PowerShell execution policy to RemoteSigned

PowerShell needs to be configured to run scripts, and by default, it isn't. You'll get the following error when you try to connect:

Files cannot be loaded because running scripts is disabled on this system. Provide a valid certificate with which to sign the files.

To require all PowerShell scripts that you download from the internet are signed by a trusted publisher, run the following command in an elevated PowerShell window (a PowerShell window you open by selecting Run as administrator):

Set-ExecutionPolicy RemoteSigned

For more information about execution policies, see About Execution Policies.

Turn on Basic authentication in WinRM

Note

As described earlier in this article, the EXO V3 module does not require Basic authentication in WinRM for REST-based connections.

For remote PowerShell connections, WinRM needs to allow Basic authentication. We do not send the username and password combination. The Basic authentication header is required to send the session's OAuth token, because the client-side implementation of WinRM does not support OAuth.

To verify that Basic authentication is enabled for WinRM, run the following command in a Command Prompt or Windows PowerShell:

Note

The following commands require that WinRM is enabled. To enable WinRM, run the following command: winrm quickconfig.

winrm get winrm/config/client/auth

If you don't see the value Basic = true, you need to run one of the following commands to enable Basic authentication for WinRM:

  • In a Command Prompt:

    winrm set winrm/config/client/auth @{Basic="true"}
    
  • In Windows PowerShell:

    winrm set winrm/config/client/auth '@{Basic="true"}'
    
  • In Windows PowerShell to modify the registry:

    Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WinRM\Client' -Name 'AllowBasic' -Type DWord -Value '1'
    

If Basic authentication for WinRM is disabled, you'll get one of the following errors when you try to connect:

The WinRM client cannot process the request. Basic authentication is currently disabled in the client configuration. Change the client configuration and try the request again.

Create Powershell Session is failed using OAuth.

Tip

Having problems? Ask for help in the Exchange forums. Visit the forums at: Exchange Online, or Exchange Online Protection.

Install the Exchange Online PowerShell module

To install the module for the first time, complete the following steps:

  1. Install or update the PowerShellGet module as described in Installing PowerShellGet.

  2. Close and re-open the Windows PowerShell window.

  3. Now you can use the Install-Module cmdlet to install the module from the PowerShell Gallery. Typically, you'll want the latest public version of the module, but you can also install a Preview version if any are available.

    • To install the latest public version of the module, run one of the the following commands:

      • In an elevated PowerShell window (all users):

        Install-Module -Name ExchangeOnlineManagement
        
      • Only for the current user account:

        Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser
        
    • To see the available Preview versions of the module, run the following command:

      Find-Module ExchangeOnlineManagement -AllVersions -AllowPrerelease
      
    • To install the latest available Preview version of the module, run one of the following commands:

      • In an elevated PowerShell window (all users):

        Install-Module -Name ExchangeOnlineManagement -AllowPrerelease
        
      • Only for the current user account:

        Install-Module -Name ExchangeOnlineManagement -Scope CurrentUser -AllowPrerelease
        
    • To install a specific Preview version of the module, replace <PreviewVersion> with the necessary value, and run one of the following commands:

      • In an elevated PowerShell window (all users):

        Install-Module -Name ExchangeOnlineManagement -RequiredVersion <PreviewVersion> -AllowPrerelease
        
      • Only for the current user account:

        Install-Module -Name ExchangeOnlineManagement -RequiredVersion <PreviewVersion> -AllowPrerelease -Scope CurrentUser
        

    When you're finished, enter Y to accept the license agreement.

For detailed syntax and parameter information, see Install-Module.

Update the Exchange Online PowerShell module

If the module is already installed on your computer, you can use the procedures in this section to update the module.

  1. To see the version of the module that's currently installed and where it's installed, run the following command:

    Get-InstalledModule ExchangeOnlineManagement | Format-List Name,Version,InstalledLocation
    

    If the module is installed in C:\Program Files\WindowsPowerShell\Modules, it's installed for all users. If the module is installed in your Documents folder, it's installed only for the current user account.

  2. You can use the Update-Module cmdlet to update the module from the PowerShell Gallery. Typically, you'll want the latest public version of the module, but you can also upgrade to a Preview version if any are available.

    • To upgrade to the latest public version of the module, run one of the following commands based on how you originally installed the module (all users vs. only for the current user account):

      • In an elevated PowerShell window (all users):

        Update-Module -Name ExchangeOnlineManagement
        
      • Only for the current user account:

        Update-Module -Name ExchangeOnlineManagement -Scope CurrentUser
        
    • To upgrade to a Preview version of the module, you can upgrade to the latest available Preview version, or you can use the RequiredVersion parameter to upgrade to a specific Preview version.

      • To see the available Preview versions of the module, run the following command:

        Find-Module ExchangeOnlineManagement -AllVersions -AllowPrerelease
        
      • To upgrade to the latest available Preview version of the module, run one of the following commands:

        • In an elevated PowerShell window (all users):

          Update-Module -Name ExchangeOnlineManagement -AllowPrerelease
          
        • Only for the current user account:

          Update-Module -Name ExchangeOnlineManagement -Scope CurrentUser -AllowPrerelease
          
      • To upgrade to a specific Preview version of the module, replace <PreviewVersion> with the necessary value, and run one of the following commands:

        • In an elevated PowerShell window (all users):

          Update-Module -Name ExchangeOnlineManagement -RequiredVersion <PreviewVersion> -AllowPrerelease
          
        • Only for the current user account:

          Update-Module -Name ExchangeOnlineManagement -Scope CurrentUser -RequiredVersion <PreviewVersion> -AllowPrerelease
          

    When you're finished, enter Y to accept the license agreement.

  3. To confirm that the update was successful, run the following commands to check the version information of the module that's installed:

    Import-Module ExchangeOnlineManagement; Get-Module ExchangeOnlineManagement
    

For detailed syntax and parameter information, see Update-Module.

Troubleshoot installing the Exchange Online PowerShell module

  • You receive one of the following errors:

    The specified module 'ExchangeOnlineManagement' with PowerShellGetFormatVersion '<version>' is not supported by the current version of PowerShellGet. Get the latest version of the PowerShellGet module to install this module, 'ExchangeOnlineManagement'.

    WARNING: Unable to download from URI 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409' to ''.

    WARNING: Unable to download the list of available providers. Check your internet connection.

    Update your installation of the PowerShellGet module to the latest version as described in Installing PowerShellGet. Be sure to close and re-open the PowerShell window before you attempt to update the ExchangeOnlineManagement module again.

  • As of April 2020, the PowerShell Gallery only supports connections using TLS 1.2 or later. For more information, see PowerShell Gallery TLS Support.

    To check your current settings in the Microsoft .NET Framework, run the following command in Windows PowerShell:

    [Net.ServicePointManager]::SecurityProtocol
    

    As described in the PowerShell Gallery TLS Support article, to temporarily change the security protocol to TLS 1.2 to install the PowerShellGet or ExchangeOnlineManagement modules, run the following command in Windows PowerShell before you install the module:

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
    

    To permanently enable strong cryptography in the Microsoft .NET Framework version 4.x or later, run one of the following commands based on your Windows architecture:

    • x64:

      Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Type DWord -Value '1'
      
    • x86

      Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Type DWord -Value '1'
      

    For more information, see SchUseStrongCrypto.

  • You receive the following error:

    No match was found for the specified search criteria and module name 'ExchangeOnlineManagement'. Try running Get-PSRepository to see all available registered module repositories.

    The default repository for PowerShell modules is not set to PSGallery. To fix this error, run the following command:

    Register-PSRepository -Default
    

Uninstall the Exchange Online PowerShell module

To see the version of the module that's currently installed and where it's installed, run the following command:

Get-InstalledModule ExchangeOnlineManagement | Format-List Name,Version,InstalledLocation

If the module is installed in C:\Program Files\WindowsPowerShell\Modules, it was installed for all users. If the module is installed in your Documents folder, it was installed only for the current user account.

To uninstall the module, run one of the following commands based on how you originally installed the module (all users vs. only for the current user account):

  • In an elevated PowerShell window (all users):

    Uninstall-Module -Name ExchangeOnlineManagement
    
  • Only for the current user account:

    Uninstall-Module -Name ExchangeOnlineManagement
    

For detailed syntax and parameter information, see Uninstall-Module.

Properties and property sets in the Exchange Online PowerShell module

Traditional Exchange Online cmdlets return all possible object properties in their output, including many properties that are often blank or aren't interesting in many scenarios. This behavior causes degraded performance (more server computation and added network load). You rarely (if ever) need the full complement of properties in the cmdlet output.

The Get-EXO* cmdlets in the module have categorized output properties. Instead of giving all properties equal importance and returning them in all scenarios, we've categorized specific related properties into property sets. Simply put, these property sets are buckets of two or more related properties on the cmdlet.

The biggest and most used Get-EXO* cmdlets use property sets:

In those cmdlets, property sets are controlled by the following parameters:

You can use the PropertySets and Properties parameters together in the same command.

We've also included a Minimum property set that includes a bare minimum set of required properties for the cmdlet output (for example, identity properties). The properties in the Minimum property sets are also described in Property sets in Exchange Online PowerShell module cmdlets.

  • If you don't use the PropertySets or Properties parameters, you automatically get the properties in the Minimum property set.
  • If you use the PropertySets or Properties parameters, you get the specified properties and the properties in the Minimum property set.

Either way, the cmdlet output will contain far fewer properties, and the time it takes to return those results will be much faster.

For example, after you connect to Exchange Online PowerShell, the following example returns only the properties in the Minimum property set for the first ten mailboxes.

Get-EXOMailbox -ResultSize 10

In contrast, the output of the same Get-Mailbox command would return at least 230 properties for each of the first ten mailboxes.

Note

Although the PropertySets parameter accepts the value All, we highly discourage using this value to retrieve all properties, because it slows down the command and reduces reliability. Always use the PropertySets and Properties parameters to retrieve the minimum number of properties that are required for your scenario.

For more information about filtering in the module, see Filters in the Exchange Online PowerShell module.

Release notes

Unless otherwise noted, the current release of the Exchange Online PowerShell module contains all features of previous releases.

Current release: Version 3.0.0 (Preview versions known as v2.0.6-PreviewX)

  • Features already described in the Updates for version 3.0.0 (the EXO V3 module) section:
    • Certificate based authentication for Security & Compliance PowerShell (version 2.0.6-Preview5 or later).
    • The Get-ConnectionInformation cmdlet for REST-based connections (version 2.0.6-Preview7 or later).
    • The SkipLoadingFormatData switch on the Connect-ExchangeOnline cmdlet for REST-based connections (version 2.0.6-Preview8 or later).
  • Certain cmdlets that used to prompt for confirmation in specific scenarios no longer do so. By default, the cmdlet will run to completion.
  • The format of the error returned from failed cmdlet execution has been slightly modified. The exception now contains additional data (for example, the exception type), and the FullyQualifiedErrorId does not contain the FailureCategory. The format of the error is subject to further modification.

Previous releases

Version 2.0.5

  • New Get-OwnerlessGroupPolicy and Set-OwnerlessGroupPolicy cmdlet to manage ownerless Microsoft 365 groups.

    Note

    Although the cmdlets are available in the module, the feature is only available to members of a Private Preview.

  • New Get-VivaInsightsSettings and Set-VivaInsightsSettings cmdlets to control user access to Headspace features in Viva Insights.

Version 2.0.4

  • PowerShell 7 is officially supported in Windows, Linux, and Apple macOS as described in the Prerequisites for the Exchange Online PowerShell module section in this article.

  • The module in PowerShell 7 supports browser-based single sign-on (SSO) and other sign in methods. For more information, see PowerShell 7 log in experiences.

  • The Get-UserAnalyticsConfig and Set-UserAnalyticsConfig cmdlets have been replaced by the Get-MyAnalyticsConfig and Set-MyAnalyticsConfig.Additionally, you can configure access at feature level. For more information, see Configure MyAnalytics.

  • Real-time policy and security enforcement in all user based authentication. Continuous Access Evaluation (CAE) has been enabled in the module. Read more about CAE here.

  • The LastUserActionTime and LastInteractionTime properties are now available in the output of the Get-EXOMailboxStatistics cmdlet.

  • The interactive sign-in process now uses a more secure method to fetch access tokens using safe reply URLs.

Version 2.0.3

  • General availability of certificate based authentication (CBA), which enables using modern authentication in unattended scripting or background automation scenarios. The available certificate storage locations are:
  • Connect to Exchange Online PowerShell and Security & Compliance PowerShell simultaneously in a single PowerShell window.
  • The new CommandName parameter allows you to specify and restrict the Exchange Online PowerShell cmdlets that are imported in a session. This option reduces the memory footprint for high usage PowerShell applications.
  • Get-EXOMailboxFolderPermission now supports ExternalDirectoryObjectID in the Identity parameter.
  • Optimized latency of the first V2 cmdlet call. Lab results show the first call latency has been reduced from 8 seconds to approximately 1 second. Actual results will depend on the cmdlet result size and the tenant environment.

Version 1.0.1

  • General Availability (GA) version of the EXO V2 module. It is stable and ready for use in production environments.
  • Get-EXOMobileDeviceStatistics cmdlet now supports the Identity parameter.
  • Improved reliability of session auto-reconnect in certain cases where a script was running for ~50 minutes and threw a "Cmdlet not found" error due to a bug in auto-reconnect logic.
  • Fixed data-type issues of two commonly used "User" and "MailboxFolderUser" attributes for easy migration of scripts.
  • Enhanced support for filters as it now supports four more operators: EndsWith, Contains, Not and NotLike support. Check Filters in the Exchange Online PowerShell module for attributes that aren't supported in filters.

Version 0.4578.0

  • Added support for configuring the Briefing Email for your organization at the user level with Set-UserBriefingConfig and Get-UserBriefingConfig cmdlets.
  • Support for session cleanup using Disconnect-ExchangeOnline cmdlet. This cmdlet is the V2 equivalent of Get-PSSession | Remove-PSSession. In addition to cleaning up session object and local files, it also removes the access token from cache, which is used for authenticating against V2 cmdlets.
  • You can now use FolderId as an identity parameter in Get-EXOMailboxFolderPermission. You can get the FolderId value using Get-MailboxFolder. For example: Get-MailboxFolderPermission -Identity <UPN>:<Folder-Path> Get-MailboxFolderPermission -Identity <UPN>:\<Folder-Id>
  • Improved reliability of Get-EXOMailboxStatistics as certain request routing errors which led to failures have been resolved.
  • Optimized memory usage when a session is created by re-using any existing module with a new session instead of creating a new one every time session is imported.

Version 0.4368.1

  • Added support for Security & Compliance PowerShell cmdlets using the Connect-IPPSSession cmdlet.
  • Hiding the announcement banner is available using the ShowBanner switch (-ShowBanner:$false).
  • Terminate cmdlet execution on client exception.
  • Remote PowerShell contained various complex data types which were intentionally not supported in EXO cmdlets to improve performance. Differences in non-complex data types between remote PowerShell cmdlets and V2 cmdlets have been resolved to allow seamless migration of management scripts.

Version 0.3582.0

  • Support for prefix during session creation.
    • You can create only 1 session at a time that contains prefixed cmdlets.
    • Note that the EXO V2 cmdlets will not be prefixed as they already have the prefix EXO, so don't use EXO as a prefix.
  • Use EXO V2 cmdlets even if WinRM Basic Auth is disabled on client machine. Note that remote PowerShell cmdlets require WinRM Basic Auth, and they won't be available if it's disabled.
  • Identity parameter for V2 cmdlets now supports Name and Alias as well. Note that using Alias or Name slows down the performance of V2 cmdlets, so we don't recommend using them.
  • Fixed issue where the data type of attributes returned by V2 cmdlet was different from remote PowerShell cmdlets. We still have few attributes which have differing data types, and we plan to handle them in coming months.
  • Fixed bug: Frequent sessions reconnects issue when Connect-ExchangeOnline was invoked with Credentials or UserPrincipalName

Version 0.3555.1

  • Fixed a bug where piped cmdlets were failing with the following error due to an authentication issue:

    Cannot invoke the pipeline because the runspace is not in the Opened state. Current state of the runspace is 'Closed'.

Version 0.3527.4

  • Updated Get-Help content.
  • Fixed an issue in Get-Help where the Online parameter was redirecting to a non-existent page with error code 400.

Version 0.3527.3

  • Added support for managing Exchange for a different tenant using delegation flow.
  • Works in tandem with other PowerShell modules in a single PS window.
  • Added support for positional parameters.
  • Date Time field now supports client locale.
  • Bug fix: PSCredential empty when passed during Connect-ExchangeOnline.
  • Bug fix: Client module error when filter contained $null.
  • Sessions created internal to EXO V2 Module now have names (naming pattern: ExchangeOnlineInternalSession_%SomeNumber%).
  • Bug fix: Remote PowerShell cmdlets intermittently failing due to time the difference between token expiry and the PSSession going idle.
  • Major security update.
  • Bug fixes and enhancements.