42

一部の機能をメインのPowerShellスクリプトから分離したい場合は、それを.ps1ファイルとして記述し、同じドットソースを作成するか、を.psm1使用して同じものを作成してインポートすることができますImport-Module

どちらが優れているのか、そしてその理由は?

4

3 に答える 3

35

モジュールはライブラリに最適です。モジュールからエクスポートされるものをより詳細に制御できます。つまり、デフォルトでは、PSM1 ファイル内のすべてのスクリプト変数はプライベートであり、インポート時にモジュールの外部には表示されません。同様に、すべての関数はパブリックです。ただし、PSM1 ファイルで Export-ModuleMember を使用して、モジュールからエクスポートする変数、関数、エイリアス、コマンドレットなどを正確に制御できます。モジュールはセッションから削除することもできます。これは、.PS1 スクリプトのドットソーシングとの大きな違いです。もう 1 つの違いは、モジュール関数はそれらが含まれるモジュールによって名前空間が付けられるため、モジュール名と関数名の前に "\" を付けることで、同じ名前のモジュールベースの関数に簡単にアクセスできることです (PSCX\Get-Uptime など)。ISE では、このプレフィックスは Intellisense サポートも呼び出します。

通常、モジュールを使用することをお勧めします。:-)

于 2013-02-14T20:01:30.190 に答える
20

ドットソーシング+スクリプトとモジュールは2つの異なるものです。モジュールは、スクリプトで使用する関数やコマンドレットを収集/グループ化するのに最適です。インタラクティブに使用したい関数がある場合(コンソールで関数を呼び出す場合)、モジュールが最適です。

実行する大きなスクリプトが1つある場合、たとえば「ファイル共有を移行する」、またはタスクスケジューラを使用して定期的に呼び出す単一のスクリプトがある場合は、ドットソーシングが簡単になります。

それはあなたが必要とするものに依存します。概要:

  • この状況で関数/スクリプトを使用する場合(スクリプト/ジョブ)=ドットソースを使用します。
  • 他のスクリプトでも使用されている一般的な関数/スクリプトを使用する場合、または一部の関数をインタラクティブに呼び出したい場合など。=モジュールを使用します。
于 2013-02-14T19:22:13.113 に答える
7

他の回答に加えて、いくつかのモジュール機能。

  • Import-ModulePowerShell V3 では、モジュールのエクスポートされたコマンドを使用するために呼び出す必要はありません。これは、コマンドが対話的に使用される場合に特に便利です。PowerShell は何らかの方法で、使用可能なすべてのモジュール コマンドとそのヘルプをキャッシュして認識しますGet-Help SomeCommand(ただし、これはモジュールのヘルプには当てはまりませんGet-Help about_SomeModule)。

  • ドット ソース関数とスクリプト モジュール関数の動作には、いくつかの微妙な違いがあります。それらをすべてリストするのは簡単ではありません。ここに 1 つの例 を示します。 スクリプト モジュールの使用が苦痛になる場合があります。特に、不要な違いや問題を発見するのが遅すぎる場合、つまり、開発の最初は単純なものは問題なく動作しますが、複雑なものは後でうまくいかなくなります。

全体として、うまく機能しない場合を除いて、通常はモジュールを使用します。そのうちの 1 つは、スクリプト モジュール関数で渡されたユーザー スクリプト ブロックを呼び出すことです。

于 2013-02-14T23:58:20.237 に答える