11

私はしばらくこれに苦労してきました。プロジェクト用に新しい PowerShell モジュールを作成するつもりです。目的は、いくつかのカスタム コマンドレットをスタンドアロン ユニットにパッケージ化し、Nexus リポジトリ (またはその他のもの) を介して他のマシンに展開できるようにすることです。

問題:どこを見ても、すべての PowerShell 関数/コマンドレットを単一の *.psm1ファイルにパッケージ化するチュートリアルを目にします。ファイルは、実際にはモジュール自体を表す同じ名前のディレクトリ内に保存されます。

質問:各コマンドレット/関数をスタンドアロン ファイルに分割する方法はありますか? 複数のコマンドレットで構成されるモジュールがある場合、それらすべてを単一の *.psm1 ファイルに入れるのはあまり便利ではありません。

ありがとうマシュー

4

3 に答える 3

14

マニフェスト ファイルを使用することもできます。「モジュール マニフェストは、ハッシュ テーブルを含む .psd1 ファイルです。ハッシュ テーブルのキーと値は、次のことを行います。

  • モジュールの内容と属性を記述します。
  • 前提条件を定義する
  • コンポーネントの処理方法を決定します。

モジュールにはマニフェストは必要ありません。モジュールは、スクリプト ファイル (.ps1)、スクリプト モジュール ファイル (.psm1)、マニフェスト ファイル (.psd1)、書式設定および型ファイル (.ps1xml)、コマンドレットおよびプロバイダー アセンブリ (.dll)、リソース ファイル、ヘルプ ファイル、ローカリゼーションを参照できます。ファイル、またはモジュールの一部としてバンドルされているその他の種類のファイルまたはリソース。国際化されたスクリプトの場合、モジュール フォルダーには一連のメッセージ カタログ ファイルも含まれます。マニフェスト ファイルをモジュール フォルダーに追加すると、マニフェストを参照することで、複数のファイルを 1 つの単位として参照できます。」 (ソース)

したがって、psd1 ファイルから直接 psm1 ファイルの代わりに ps1 ファイルを使用できます。

# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess 
NestedModules = 'Get-WUList.ps1','Add-WUOfflineSync.ps1'

# Functions to export from this module 
FunctionsToExport = 'Get-WUList','Add-WUOfflineSync'
于 2015-04-15T07:21:00.633 に答える
1

実際に質問自体を書いていたときに見つけたこの回答を投稿するだけです:-)。インターネットからいくつかの PowerShell モジュールをダウンロードして内部を調べたところ、そこに答えが見つかりました。しかし、私は数時間これに行き詰まったので (powershell の新機能 ;-))、将来の世代のためにとにかくこれを投稿することにしました :-P.

コマンドレット (*.ps1 ファイル) ごとに別のファイルに入れることができます。それらをモジュール ディレクトリ内に格納し、*.psm1 ファイルを作成します。次に、*.ps1 コマンドレット/関数をこの *.psm1 にドットソースします。

ただし、* . ps1 ファイルが保存されている現在のモジュール ディレクトリへの参照は、次のように指定する必要があります

マシューを楽しむ

于 2015-04-15T06:12:45.930 に答える