PowerShellClass1.dll結果モジュールが読み込まれます。PowerShellで読み込み、実行することができます。サポートをフルに受けれるので、開発としては非常に楽なのは確かです。Cmdletや変数」などの制御が可能です。マニフェストモジュールによる、モジュール制御を見てみましょう。先述したスクリプトモジュールやバイナリモジュールをマニフェスト(.psd1)を用いてきめ細かく制御します。モジュールを読み込んだ時にバージョンなどを指定することができず、またモジュール内部で仕込む場所もありません。利用することで、複数のスクリプトモジュールをまとめて一つのモジュールとして読み込ませたりも可能になります。指定できるようになったため一層使いやすくなりました。具体的に、マニフェストファイルの生成から内容まで見ていきましょう。New-ModuleManifestまずはサンプルとして空のマニフェストを作ってみてみます。このモジュールのバージョン番号です。このモジュールからエクスポートされたコマンドの既定のプレフィックス。.psm1や.dllを指定する)やModuleVersion(モジュールバージョンの指定)、FunctionsToExport(出力するファンクションを指定)を記述することで、Import-Moduleでモジュールが読み込まれるときに、読み込まれるモジュールを制御します。マニフェストファイルを出力するマニフェストファイル(.psd1)は、モジュールファイル(.psm1)同様、対象のモジュールフォルダ直下に配置します。valentiaのマニフェストファイルを見てみましょう。マニフェストファイル(.psd1)を次のコマンドレットで出力しています。@moduleManufest出力された結果です。ハッシュテーブル形式で記述されていることがわかると思います。多くのパラメータは、読んでそのままですが注意を要する項目に触れておきましょう。RootModuleこのパラメータにバイナリモジュール(.dll)やモジュールファイル(.psm1)の名前(.psd1の同一パスに.ps1mが存在することが同一パスとなる)を指定することで、対象のモジュールをモジュールファイルの記述(あるいバイナリモジュールの記述)通りに読み込んでからマニフェスト(.psd1)の記述で制御します。スクリプトモジュールとなります。NestedModuleこのパラメータは、モジュールファイル(.psm1)を複数指定することで、対象のモジュールをまとめてモジュールファイルの記述(あるいバイナリモジュールの記述)通りに読み込んでからマニフェスト(.psd1)の記述で制御します。マニフェストモジュールとなります。FunctionToExportモジュールファイルなどで、Export-ModuleMemberで指定したファンクションの制御に利用します。マニフェストファイル(.psd1)が存在するとき、モジュールファイル(.psm1)で指定され、かつマニフェストのこのパラメータで指定されたファンクションのみがモジュールファンクションとして出力されます。基本的に同様に働き、変数やAliasも制限が可能です。指定もありますが、ここでは割愛します。マニフェストでのモジュール読み込みマニフェストであっても、モジュールの読み込み方法は同様です。モジュールフォルダと同一の名称を付けて出力します。することでモジュールがインポートされます。これまであげたモジュールと一つ大きな違いがあります。セッション内部/インメモリにモジュール生成するPowerShellセッションが切れるとダイナミックモジュールも消えます。この恒久的ではなく一時的なモジュールという性質が他と大きく異なる点です。ダイナミックモジュールの生成を見てみましょう。コマンドレットを利用します。functionとしてのダイナミックモジュール例えば、以下のようなHelloと出すだけのダイナミックモジュールを実行するとWindowsで勝手にNameを付けてくれます。Hellofunctionとしてのダイナミックモジュールに名称をつけるもしモジュールに名前を付けたい場合は、-Nameパラメータで指定します。することでメソッドの追加も可能です。gmこのように、スクリプトメソッドを生成することができます。Hello();実行してみましょう。$hoge.hoge("guitarrapc")メソッド実行できていますね。guitarrapcダイナミックモジュール内部でfunctionを実行して結果だけを返す最後に、-ReturnResultとすることで、スクリプトブロックの実行内容を返します。ファンクションが実行された結果が変えります。test!ダイナミックモジュールは、その場限りのモジュールなため、私自身はそれほど使いませんが、繰り返し実行にはいいかも知れませんね。モジュールへのコマンドレット配置手法PowerShellスクリプト単独でモジュールを作る場合、モジュールのファンクションや動作をモジュールファイル(.psm1)で定め、マニフェスト(.psd1)で公開する情報を制御するマニフェストモジュールが最も利用されることでしょう。モジュールファイルで複数のファンクションを読み込ませるにあたり、どのように配置するべきかを考えるとおよそ2つあるかと思います。変数の受け渡しで工夫を要するそれぞれのメリットとデメリットを見てみましょう。モジュールファイル(.psm1)に直接書き込むモジュールファイル内部で、利用するファンクションを直接記述し、モジュールファイル(.psm1)の最後でExport-ModuleMemberにて制御する方法です。この手法で開発されている有名なライブラリとしては、psakeがあります。もこの手法で記述しています。メリット非常に直観的で、変数などのインテリセンスも何も考えずとも.psm1さえ開いていれば効くため、書いている時は楽です。デメリットすべてのファンクションが一つのファイルに存在するのは、可読性を著しく下げます。GitHubのようなバージョン管理ツールと相性が悪く、一部の機能でもファイル全体の更新という結果になります。切り替えタイミング3,4個のファンクションであったり、さくっと書いただけというかき捨てならばともかく、モジュールがある程度の規模になった場合は、「.ps1へ分散」を検討するべきです。スクリプトファイル(.ps1)分散/モジュールファイル(.psm1)にドットソース読込モジュールで利用するファンクションを、一つ一つスクリプトファイル(.ps1)に分散させ、モジュールファイル(.psm1)にはフォットソースで読み込む手法です。この手法で開発されている有名なライブラリとしては、Pesterやchocolateyがあります。もこの手法で開発しています。メリット機能別に分離しており可読性、保守性が高くなります。GitHubのようなバージョン管理ツールでも、変更があった箇所のみの更新となります。.psm1に直接すべて記述するのに比べると難があります。大した手間ではない上に、それにも勝る保守性の良さがあります。分散させている場合、今度はその読み込みをどのように簡略化するか考える必要があります。見かけるこれは、非推奨です。$psScriptRoot\bar.ps1なぜなら、スクリプトファイルが増えるごとに毎回メンテナンスが必要です。functionを格納するフォルダを生成し、フィルタして自動的に読み込ませましょう。Pesterの場合は、このようにしています。}valentiaの場合も、似たような形式です。長さになってしまいましたが、おおよそモジュールに関する説明となりました。プロジェクトの規模に応じて、スクリプトモジュール、マニフェストモジュールを選択し、メンテナンス性を考えてスクリプトファイル(.ps1)を配置、開発できるとよいかと思います。@rbtnnさんです。2010/2012でも可能です。(9)トップへ戻るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。