How to use Office 365 Exchange PowerShell module in Azure Automation

How to use Office 365 Exchange PowerShell module in Azure Automation

We had to do automation around Office 365 mailboxes a couple of days ago and struggled to do it. We looked around and found the solution in a sea of non working articles. Let this save you time if you want to do this yourself.

Why running in Azure Automation

Instead of executing a script in Windows task scheduler that requires a virtual machine (VM), we wanted to execute our mailbox script in Azure Automation. Mainly to get rid of the dependence on a VM and to benefit of a secure way to save the credentials for the script. We thought this would just work out of the box, but there is a gotcha we encountered with the Exchange PowerShell module in Azure automation.

Problem

In almost all articles, you'll find the code similar to this one:

$credential = Get-AutomationPSCredential -Name 'O365ServiceAccount'

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'https://outlook.office365.com/powershell-liveid/ -Credential $credential -Authentication Basic -AllowRedirection

Import-PSSession -Session $session -DisableNameChecking -AllowClobber -DisableNameChecking

When run, we encountered an error trying to use one of the cmdlet in the module, e.g.: Get-Mailbox, the cmdlet was not found, like if Import-PSSession didn't work loading the cmdlets in the Azure Automation session.

Get-Mailbox : The term 'Get-Mailbox' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Get-Mailbox
+ ~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (get-mailbox2:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException   

Solution

In a good blog from undocumented-feature.com, one of the comments has the answer that solved our issue. You need to import the module like this:

Para escoger comparar camisetas de fútbol por tipo de manga, es práctico verificar la temperatura prevista y la posibilidad de usar capas. El pedido puede cerrarse después de confirmar la composición del tejido y su comportamiento con el uso.

Import-Module (Import-PSSession -Session $session -DisableNameChecking -AllowClobber -DisableNameChecking) -Global

After doing this, we were able to call  Get-Mailbox cmdlet successfully in Azure Automation.

References

Read more