Microsoft.SharePoint.PowerShell snapIn に依存するいくつかのユーティリティ モジュールを作成しました。
私のマシンでスクリプトを実行すると、スクリプトはすべて正しく実行されます。PowerShell を「デフォルトでロード」するためのモジュールやスナップインはプロファイルにありませんが、他のマシンではプロファイルがクリーンであるとは保証できません。
私のモジュールローダー.psd1ファイルでは、次のものを使用しています
NestedModules = @( 'Microsoft.SharePoint.PowerShell',
'.\Modules\CustomModule.psd1')
ps1 ファイルを使用して、次のモジュールのインポート コマンドを含むこれらのモジュールのインポートをトリガーします。
Import-Module -Name "$dir\.\CustomModules.psd1" -Global -Force -PassThru
この方法で実行すると、スナップインが既に読み込まれているため、プロファイルに Microsoft.SharePoint.PowerShell スナップインが含まれているマシンで名前競合エラーが発生します。
-NoProfile 引数を使用して PowerShell コマンドを実行できることはわかっていますが、これはシナリオでは有効なソリューションではありません。
また、NestedModules セクションからスナップインを削除して、モジュールがインポートされる前に .ps1 ファイルで次を実行しようとしましたが、スナップインが読み込まれていると表示されないため、モジュールのインポートは失敗します。
if ((Get-PSSnapin | ? {$_.Name -eq 'Microsoft.SharePoint.PowerShell'}) -eq $null)
{
Write-Host "Adding PSSnapin 'Microsoft.SharePoint.PowerShell'"
Add-PSSnapin 'Microsoft.SharePoint.PowerShell' }
ユーザー プロファイルに関係なく、スナップインが適切に読み込まれ、モジュールが正常にインポートされるようにするには、このソリューションをどのように作り直すことができますか?
私の理想的なシナリオは次のとおりです。
Task.ps1 (The custom task me or other devs are trying to achieve)
> Calls ImportModules.ps1 (Hides the importing logic of modules and snap-ins)
> Imports CustomModules.psd1 (Imports all modules, functions, global vars into the runspace)