Import-Pssession is not importing cmdlets when used in a custom module

Posted by Douglas Plumley on Stack Overflow See other posts from Stack Overflow or by Douglas Plumley
Published on 2012-11-21T22:03:31Z Indexed on 2012/12/10 5:04 UTC
Read the original article Hit count: 297

Filed under:

I have a PowerShell script/function that works great when I use it in my PowerShell profile or manually copy/paste the function in the PowerShell window.

I'm trying to make the function accessible to other members of my team as a module. I want to have the module stored in a central place so we can all add it to our PSModulePath.

Here is a copy of the basic function:

Function Connect-O365{ $o365cred = Get-Credential [email protected] $session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $session365 -AllowClobber }

If I save this function in my PowerShell profile it works fine. I can dot source a *.ps1 script with this function in it and it works as well.

The issue is when I save the function as a *.psm1 PowerShell script module. The function runs fine but none of the exported commands from the Import-PSSession are available. I think this may have something to do with the module scope.

I'm looking for suggestions on how to get around this.

EDIT

When I create the following module and run Connect-O365 the imported cmdlets will not be available.

$scriptblock = { Function Connect-O365{ $o365cred = Get-Credential [email protected] $session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $session365 -AllowClobber } }

New-Module -Name "Office 365" -ScriptBlock $scriptblock

When I import the next module without the Connect-O365 function the imported cmdlets are available.

$scriptblock = { $o365cred = Get-Credential [email protected] $session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $o365cred -Authentication Basic -AllowRedirection Import-PSSession $session365 -AllowClobber }

New-Module -Name "Office 365" -ScriptBlock $scriptblock

This appears to be a scope issue of some sort, just not sure how to get around it.

© Stack Overflow or respective owner

Related posts about powershell-v3.0