Reducing Memory Consumption of the Exchange Online PowerShell V3 Module
Our REST based Exchange Online PowerShell V3 module is a powerful tool that allows you to connect to Exchange Online and perform various tasks using PowerShell. It is a significant improvement over the previous V2 module in terms of security as it does not depend on RPS protocol connections.
We have heard some customer feedback that the V3 module consumes more memory than previous modules, which is affecting the performance of their scripts and systems. In this blog post, we will share some tips on how you can reduce the memory consumption of the V3 module and optimize your scripts for better efficiency.
Tip 1: Do not load the help package
One of the main sources of memory consumption in the V3 module is the help package, which contains detailed information and examples for each cmdlet. While this can be useful for learning and troubleshooting, it is not necessary when running automated scripts. Therefore, we recommend that you use the parameter –SkipLoadingCmdletHelp that has been added for memory optimization in the latest release. Using this parameter skips loading the help package into the PowerShell process and thus reduces the memory consumption by a large amount.
For example, instead of using:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
You can use:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -SkipLoadingCmdletHelp
Tip 2: Load only specific cmdlets which are required by a script
You can load only the cmdlets that you need in your script. By default, when you run the Connect-ExchangeOnline command, the V3 module loads hundreds of cmdlets into the PowerShell process. This can use up a lot of memory and make your script slower. If your script only uses a few cmdlets, you can use the -CommandName parameter and specify only the cmdlets that you want. This way, only the listed cmdlets are loaded and memory usage can be lower.
For example, if a particular script only uses the Get-Mailbox and Get-User cmdlets, you can use:
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -CommandName Get-Mailbox,Get-User
Tip 3: Create a new PowerShell process for each new Exchange Online connection
A final tip is to create a new PowerShell process for each new Exchange Online connection. PowerShell caches everything from the time the process begins and the cache will be erased only when the number of cache entries exceeds a certain limit. This limit is usually not reached even after multiple runs of Connect/Disconnect-ExchangeOnline. If your script disconnects and reconnects to Exchange Online multiple times in the same PowerShell process, multiple instances of the V3 module would get stored in the cache increasing the memory consumption. Hence, we advise you to close the PowerShell process whenever you disconnect from Exchange Online and create a new PowerShell process if you want to reconnect.
For example, instead of using:
# Connect to Exchange Online
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
# Do some tasks
# Disconnect from Exchange Online
Disconnect-ExchangeOnline
# Connect to Exchange Online again
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
# Do some more tasks
# Disconnect from Exchange Online again
Disconnect-ExchangeOnline
You can use:
# Start a new PowerShell process
Start-Process powershell
# Connect to Exchange Online
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
# Do some tasks
# Disconnect from Exchange Online
Disconnect-ExchangeOnline
# Exit the PowerShell process
Exit
# Start another new PowerShell process
Start-Process powershell
# Connect to Exchange Online again
Connect-ExchangeOnline -UserPrincipalName admin@contoso.com
# Do some more tasks
# Disconnect from Exchange Online again
Disconnect-ExchangeOnline
# Exit the PowerShell process
Exit
We hope that these tips will help you reduce the memory consumption of the Exchange Online PowerShell V3 module and improve your script performance. If you have any questions or feedback, please feel free to leave a comment below. Thank you for reading!
Nguồn MS Exchange online team blog