6

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

これはある種のスコープの問題のようですが、それを回避する方法がわかりません。

4

1 に答える 1

10

TechNetの助けを借りて、スクリプトモジュールを変更することができたので、期待どおりに機能しました。

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-Module (Import-PSSession $session365 -AllowClobber) -Global
}

TechNet投稿

于 2012-12-20T12:50:47.983 に答える