Scroll Top
Evotec Services sp. z o.o., ul. Drozdów 6, Mikołów, 43-190, Poland

Office 365 – Using Import-PSSession from separate module

Import-PSSession

Recently I've been working on a little code allowing me to connect to Office 365. It's not a really big deal, and there's a lot of options around. I wanted something of my own and something that outputs stuff I want it to output. All was going fine until I decided to move the same code that was working correctly into a separate module. Even thou commands Connect-WinExchange or Connect-WinAzureAD were executing successfully none of the commands from those sessions worked. No Get-Mailbox, no Get-MailContact. It turns out that being in another module actually puts a scope on it and therefore it's not provided when used outside of that module. I've considered two workarounds for this.

Workaround One

Use Import-PSSession in your main module and keep all other code in your “connectivity” module.

Import-PSSession -Session $Session -AllowClobber -DisableNameChecking -Prefix $Prefix -Verbose:$false

And this basically works as expected. The only thing is you can't have Connect-WinExchange as a standalone command. You need to use it just to build connection.

$Session = Connect-WinExchange -Credentials $Credentials
Import-PSSession -Session $Session -AllowClobber -DisableNameChecking -Prefix $Prefix -Verbose:$false

If you can live with it.. it's good solution.

Workaround Two

Other workaround is to use Import-Module. While it doesn't come as solution at first sight you can actually do something like this

Import-Module (Import-PSSession -Session $Session -AllowClobber -DisableNameChecking -Verbose:$false) -Global

Therefore your function would look like this (more or less)

function Connect-WinExchange {
    [CmdletBinding()]
    param(
        [string] $SessionName = 'Exchange',
    )
    # Your Code Goes Here
    Import-Module (Import-PSSession -Session $Session -AllowClobber -DisableNameChecking -Verbose:$false) -Global
}

Import-PSSession

Related Posts