PowerShellプロファイルで使用するか、PowerShellウィンドウで関数を手動でコピーして貼り付けると、うまく機能するPowerShellスクリプト/関数があります。
モジュールとして、チームの他のメンバーが関数にアクセスできるようにしようとしています。モジュールを中央の場所に保存して、PSModulePathに追加できるようにします。
基本的な機能のコピーは次のとおりです。
Function Connect-O365{
$o365cred = Get-Credential username@domain.onmicrosoft.com
$session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $o365cred -Authentication Basic -AllowRedirection
Import-PSSession $session365 -AllowClobber
}
この関数をPowerShellプロファイルに保存すると、正常に機能します。この関数を含む*.ps1スクリプトをドットソースすることができ、それも機能します。
問題は、関数を*.psm1PowerShellスクリプトモジュールとして保存する場合です。関数は正常に実行されますが、Import-PSSessionからエクスポートされたコマンドはどれも使用できません。これはモジュールスコープと関係があるのではないかと思います。
これを回避する方法についての提案を探しています。
編集
次のモジュールを作成してConnect-O365を実行すると、インポートされたコマンドレットが使用できなくなります。
$scriptblock = {
Function Connect-O365 {
$o365cred = Get-Credential username@domain.onmicrosoft.com
$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
Connect-O365機能を使用せずに次のモジュールをインポートすると、インポートされたコマンドレットが使用可能になります。
$scriptblock = {
$o365cred = Get-Credential username@domain.onmicrosoft.com
$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
これはある種のスコープの問題のようですが、それを回避する方法がわかりません。