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