一部の機能をメインのPowerShellスクリプトから分離したい場合は、それを.ps1
ファイルとして記述し、同じドットソースを作成するか、を.psm1
使用して同じものを作成してインポートすることができますImport-Module
。
どちらが優れているのか、そしてその理由は?
一部の機能をメインのPowerShellスクリプトから分離したい場合は、それを.ps1
ファイルとして記述し、同じドットソースを作成するか、を.psm1
使用して同じものを作成してインポートすることができますImport-Module
。
どちらが優れているのか、そしてその理由は?
モジュールはライブラリに最適です。モジュールからエクスポートされるものをより詳細に制御できます。つまり、デフォルトでは、PSM1 ファイル内のすべてのスクリプト変数はプライベートであり、インポート時にモジュールの外部には表示されません。同様に、すべての関数はパブリックです。ただし、PSM1 ファイルで Export-ModuleMember を使用して、モジュールからエクスポートする変数、関数、エイリアス、コマンドレットなどを正確に制御できます。モジュールはセッションから削除することもできます。これは、.PS1 スクリプトのドットソーシングとの大きな違いです。もう 1 つの違いは、モジュール関数はそれらが含まれるモジュールによって名前空間が付けられるため、モジュール名と関数名の前に "\" を付けることで、同じ名前のモジュールベースの関数に簡単にアクセスできることです (PSCX\Get-Uptime など)。ISE では、このプレフィックスは Intellisense サポートも呼び出します。
通常、モジュールを使用することをお勧めします。:-)
ドットソーシング+スクリプトとモジュールは2つの異なるものです。モジュールは、スクリプトで使用する関数やコマンドレットを収集/グループ化するのに最適です。インタラクティブに使用したい関数がある場合(コンソールで関数を呼び出す場合)、モジュールが最適です。
実行する大きなスクリプトが1つある場合、たとえば「ファイル共有を移行する」、またはタスクスケジューラを使用して定期的に呼び出す単一のスクリプトがある場合は、ドットソーシングが簡単になります。
それはあなたが必要とするものに依存します。概要:
他の回答に加えて、いくつかのモジュール機能。
Import-Module
PowerShell V3 では、モジュールのエクスポートされたコマンドを使用するために呼び出す必要はありません。これは、コマンドが対話的に使用される場合に特に便利です。PowerShell は何らかの方法で、使用可能なすべてのモジュール コマンドとそのヘルプをキャッシュして認識しますGet-Help SomeCommand
(ただし、これはモジュールのヘルプには当てはまりませんGet-Help about_SomeModule
)。
ドット ソース関数とスクリプト モジュール関数の動作には、いくつかの微妙な違いがあります。それらをすべてリストするのは簡単ではありません。ここに 1 つの例 を示します。 スクリプト モジュールの使用が苦痛になる場合があります。特に、不要な違いや問題を発見するのが遅すぎる場合、つまり、開発の最初は単純なものは問題なく動作しますが、複雑なものは後でうまくいかなくなります。
全体として、うまく機能しない場合を除いて、通常はモジュールを使用します。そのうちの 1 つは、スクリプト モジュール関数で渡されたユーザー スクリプト ブロックを呼び出すことです。