PowerShell 3 以降では、RequiredModulesが自動的に読み込まれます
また、モジュールを配布する場合、PowerShellGet (つまりPowerShell ギャラリー) を使用しているユーザーが依存関係をインストールすることを確認する唯一の方法でもあります。
必要なモジュールが欠落している場合は失敗しますが、それ以外の場合は、希望どおりに機能します。
PowerShell 2 では、RequiredModules を自動的に読み込む方法はありません
どちらの場合でも、ユーザーは入力して手動で要件を読み込むことができますImport-Module RequiredModule, YourModule
-- 既にインポートされている場合、2 番目のインスタンスは取得されません ...
代わりに NestedModules でモジュールを指定することもできます。PowerShell 2 でも、それらはモジュールの "内部" に読み込まれますが、既に読み込まれている場合、リソースに悪影響を与えるようには見えません。ただし、@JasonMArcherが思い出したように、PowerShell 2では、モジュールが(Remove-Moduleを介して)アンロードされると、NestedModulesがモジュールとともにアンロードされます。これは、ユーザーが個別にプリロードした場合でも発生し、最終的にはユーザーはそれを期待していないため、非常に奇妙なバグレポートが生成されます。
PowerShell のすべてのバージョンで機能する他のオプションは、モジュールのインポートが失敗するようにImport-Module
、モジュールの先頭で (モジュールがまだロードされていないことを確認した後、psm1 スクリプトで)セットを呼び出すことです。-ErrorAction Stop
依存モジュールのインポートが失敗した場合。
if (!(Get-Module Dependency)) { ## Or check for the cmdlets you need
## Load it nested, and we'll automatically remove it during clean up
Import-Module Dependency -ErrorAction Stop
}
実際、バージョンを確認したい場合は...
if (!(Get-Module Dependency | Where { $_.Version -ge "2.5" )) {
## Load version 2.5 (or newer), or die
Import-Module Dependency -Version 2.5 -ErrorAction Stop
}
これはドキュメントとして機能しないことを覚えておいてください。したがって、モジュールを配布すると、ユーザーは依存関係について知りません。