2009年12月22日火曜日

PowerShellの「モジュール」について、その2

今回も、MSDNの記事の大雑把なまとめ&和訳記事です。
内容がかなり怪しいので、MSDNの本文を確認する必要ありです
(ブログの本文も、理解できたところから随時修正します)。

---
先日の記事の続きです。モジュールの作り方には2通りあります。
モジュールマニフェストファイル(拡張子psd1のファイル)を直接作るか、
New-ModuleManifestコマンドレットで直接指定するか、のどちらかです。

New-ModuleManifestでpsd1ファイルを作成する場合、
画面の出力に合わせて、いくつかの項目を入力することになります。
これらはpsd1最終的にはpsd1ファイルに反映されます。

以下、このコマンドレットで入力する情報とその内容を列挙します。
よくわからない項目はタイトルを青文字の斜体で書いておき、
わかり次第追記していくこととします。

キーワード名 ざっくりとした説明
Path新しく作成するモジュールマニフェストファイルのパスを指定。
ファイルの拡張子は「psd1」とする必要がある。
NestedModules[]入れ子モジュールとしてインポートするスクリプトモジュールファイル(.psm1)やアセンブリ(.dll)を列挙する。
入れ子モジュールのメンバは、明示的にエクスポートを実施しない限り、ルートモジュール(ModuleToProcessにて指定)からのみ参照可能となる。
Author製作者名。
CompanyName会社名。
Copyrightモジュールのコピーライト情報。
ModuleToProcessルートモジュールとして、psm1ファイル又はDLLを1つ指定する。
ここで指定したファイルは、GlobalSessionStateにインポートされることになる。省略した場合には、そのマニフェスト自身がルートモジュールとみなされる。
Descriptionモジュールマニフェストの簡単な説明を記述する。
TypesToProcess[]モジュールのインポート時に読み込まれる型ファイル(type files)を列挙する。PowerShellは、タイプファイルを元に.NET Frameworkのタイプにメンバを追加する。
省略時は、空リストとみなされる。
FormatsToProcess[]モジュールのインポート時に読み込まれる書式ファイル(formatting files)を列挙する。
省略時は、空リストとみなされる。
RequiredAssemblies[]モジュールで使用するアセンブリファイルを列挙する。
省略時は、空リストとみなされる。
FileList[]モジュールに含まれるすべてのファイルを指定する。
省略時は、空リストとみなされる。

これらが終わると、Pathで指定した先にpsd1ファイルが作成され、
以後、Import-Moduleでモジュールを使用できるようになります。
ちなみに、すべてのセッションにインポートしたい場合は、
プロファイルにImport-Moduleコマンドレットを追加する必要があります。

作成例:
New-ModuleManifestコマンドで作成する例です。

PS D:\> New-ModuleManifest

コマンド パイプライン位置 1 のコマンドレット New-ModuleManifest
次のパラメーターに値を指定してください:
Path: D:\MyModule.psd1
NestedModules[0]:
Author: 作者名
CompanyName: 作者名
Copyright: コピーライト
ModuleToProcess:
Description: 説明は簡潔に書きましょう。
TypesToProcess[0]:
FormatsToProcess[0]:
RequiredAssemblies[0]:
FileList[0]:
PS D:\>


FileListの後ろにエラーが出なければ、
最初にPathで指定したpsd1ファイルができているはずです。
今回の場合、↓のようなファイルが出力されました。

# MyModule.psd1
# 以下、見やすさを考えて若干レイアウトに手を加えています。
# モジュール 'MyModule' のモジュール マニフェスト
# 生成者: 作者名
# 生成日: 2009/12/22
@{
# ModuleToProcess に指定されているモジュールの入れ子になったモジュールとしてインポートするモジュール
NestedModules = @()
# このモジュールの作成者
Author = '作者名'
# このモジュールの会社またはベンダー
CompanyName = '作者名'
# このモジュールの著作権情報
Copyright = 'コピーライト'
# このマニフェストに関連付けられているスクリプト モジュール ファイルまたはバイナリ モジュール ファイル
ModuleToProcess = ''
# このモジュールの機能の説明
Description = '説明は簡潔に書きましょう。'
# このモジュールをインポートするときに読み込まれる型ファイル (.ps1xml)
TypesToProcess = @()
# このモジュールをインポートするときに読み込まれる書式ファイル (.ps1xml)
FormatsToProcess = @()
# このモジュールをインポートする前に読み込まれている必要があるアセンブリ
RequiredAssemblies = @()
# このモジュールに同梱されているすべてのファイルのリスト
FileList = @()
# このモジュールのバージョン番号です。
ModuleVersion = '1.0'
# このモジュールを一意に識別するために使用される ID
GUID = '3b6c99fd-98f2-47c4-84d5-aa953a7ce6b3'
# このモジュールに必要な Windows PowerShell エンジンの最小バージョン
PowerShellVersion = ''
# このモジュールに必要な Windows PowerShell ホストの名前
PowerShellHostName = ''
# このモジュールに必要な Windows PowerShell ホストの最小バージョン
PowerShellHostVersion = ''
# このモジュールに必要な .NET Framework の最小バージョン
DotNetFrameworkVersion = ''
# このモジュールに必要な共通言語ランタイム (CLR) の最小バージョン
CLRVersion = ''
# このモジュールに必要なプロセッサ アーキテクチャ (なし、X86、Amd64、IA64)
ProcessorArchitecture = ''
# このモジュールをインポートする前に呼び出し元の環境で実行されるスクリプト ファイル (.ps1)
ScriptsToProcess = @()
# このモジュールからエクスポートする関数
FunctionsToExport = '*'
# このモジュールからエクスポートするコマンドレット
CmdletsToExport = '*'
# このモジュールからエクスポートする変数
VariablesToExport = '*'
# このモジュールからエクスポートするエイリアス
AliasesToExport = '*'
# このモジュールに同梱されているすべてのモジュールのリスト
ModuleList = @()
# ModuleToProcess に指定されているモジュールに渡すプライベート データ
PrivateData = ''
# このモジュールをインポートする前にグローバル環境にインポートされている必要があるモジュール
RequiredModules = @()
}


New-ModuleManifestでは指定していないものもたくさん出てきています。
自動生成されたコメントで何を示すものかは大体検討がつくと思いますが、
次の投稿で簡単に説明を書いてみることにします。

参考サイト
How to Write a Module Manifest
Writing a Windows PowerShell Module

0 件のコメント: