PowerShell モジュールを記述したら、モジュールに関する情報を含むオプションのモジュール マニフェストを追加できます。 たとえば、作成者を記述したり、モジュール内のファイル (入れ子になったモジュールなど) を指定したり、スクリプトを実行してユーザーの環境をカスタマイズしたり、ファイルの種類と書式設定を読み込み、システム要件を定義したり、モジュールがエクスポートするメンバーを制限したりできます。
モジュール マニフェストの作成
モジュール マニフェスト は、モジュールの内容を記述し、モジュールの処理方法を決定する PowerShell データ ファイル (.psd1
) です。 マニフェスト ファイルは、キーと値のハッシュ テーブルを含むテキスト ファイルです。 マニフェスト ファイルをモジュールにリンクするには、マニフェストにモジュールと同じ名前を付け、モジュールのルート ディレクトリにマニフェストを格納します。
1 つの .psm1
またはバイナリ アセンブリのみを含む単純なモジュールの場合、モジュール マニフェストは省略可能です。 ただし、可能な限りモジュール マニフェストを使用することをお勧めします。モジュール マニフェストは、コードを整理し、バージョン管理情報を維持するのに役立ちます。 また、グローバル アセンブリ キャッシュにインストールされているアセンブリをエクスポートするには、モジュール マニフェストが必要です。 更新可能なヘルプ機能をサポートするモジュールには、モジュール マニフェストも必要です。 更新可能なヘルプでは、モジュール マニフェストの HelpInfoUri キーを使用して、モジュールの更新されたヘルプ ファイルの場所を含むヘルプ情報 (HelpInfo XML) ファイルを検索します。 更新可能なヘルプの詳細については、「更新可能なヘルプ のサポートを参照してください。
モジュール マニフェストを作成して使用するには
モジュール マニフェストを作成するベスト プラクティスは、New-ModuleManifest コマンドレットを使用することです。 パラメーターを使用して、マニフェストの既定のキーと値を 1 つ以上指定できます。 唯一の要件は、ファイルに名前を付ける必要があります。
New-ModuleManifest
指定した値を使用してモジュール マニフェストを作成し、残りのキーとその既定値を含めます。 複数のモジュールを作成する必要がある場合は、New-ModuleManifest
を使用して、異なるモジュールに対して変更できるモジュール マニフェスト テンプレートを作成します。 既定のモジュール マニフェストの例については、サンプル モジュール マニフェストのを参照してください。New-ModuleManifest -Path C:\myModuleName.psd1 -ModuleVersion "2.0" -Author "YourNameHere"
別の方法として、必要最小限の情報である ModuleVersionを使用して、モジュール マニフェストのハッシュ テーブルを手動で作成することもできます。 モジュールと同じ名前でファイルを保存し、
.psd1
ファイル拡張子を使用します。 その後、ファイルを編集し、適切なキーと値を追加できます。マニフェスト ファイルに必要な要素を追加します。
マニフェスト ファイルを編集するには、任意のテキスト エディターを使用します。 ただし、マニフェスト ファイルはコードを含むスクリプト ファイルであるため、Visual Studio Code などのスクリプトまたは開発環境で編集することもできます。 ModuleVersion 番号を除き、マニフェスト ファイルのすべての要素は省略可能です。
モジュール マニフェストに含めることができるキーと値の説明については、モジュール マニフェスト要素 表を参照してください。 詳細については、New-ModuleManifest コマンドレットのパラメーターの説明を参照してください。
基本モジュール マニフェスト要素でカバーされない可能性があるシナリオに対処するには、モジュール マニフェストにコードを追加するオプションがあります。
セキュリティ上の懸念がある場合、PowerShell はモジュール マニフェスト ファイルで使用可能な操作のごく一部のみを実行します。 一般に、
if
ステートメント、算術演算子と比較演算子、および基本的な PowerShell データ型を使用できます。モジュール マニフェストを作成したら、それをテストして、マニフェストに記述されているパスが正しいことを確認できます。 モジュール マニフェストをテストするには、Test-ModuleManifest 使用します。
Test-ModuleManifest myModuleName.psd1
モジュール マニフェストが、モジュールを含むディレクトリの最上位に配置されていることを確認します。
モジュールをシステムにコピーしてインポートすると、PowerShell はモジュール マニフェストを使用してモジュールをインポートします。
必要に応じて、マニフェスト自体をドット ソーシングすることで、Import-Module を 呼び出してモジュール マニフェストを直接テストできます。
Import-Module .\myModuleName.psd1
モジュール マニフェスト要素
次の表では、モジュール マニフェストに含めることができる要素について説明します。
要素 | 既定値 | 説明 |
---|---|---|
RootModule 次のコマンドを入力します: String |
<empty string> |
このマニフェストに関連付けられているスクリプト モジュールまたはバイナリ モジュール ファイル。 以前のバージョンの PowerShell では、この要素を ModuleToProcessと呼びます。 ルート モジュールに使用できる型は空で、マニフェスト モジュール、スクリプト モジュールの名前 ( .psm1 )、またはバイナリ モジュールの名前 (.exe または .dll ) を作成できます。 モジュール マニフェスト (.psd1 ) またはスクリプト ファイル (.ps1 ) の名前をこの要素に配置すると、エラーが発生します。 例: RootModule = 'ScriptModule.psm1' |
ModuleVersion 次のコマンドを入力します: Version |
'0.0.1' |
このモジュールのバージョン番号。 値が指定されていない場合、New-ModuleManifest は既定値を使用します。 文字列は、#.#.#.# など、Version 型に変換できる必要があります。
Import-Module は、名前に一致する $PSModulePath で検出された最初のモジュールを読み込み、MinimumVersion パラメーターと同じ ModuleVersionを持っています。 特定のバージョンをインポートするには、Import-Module コマンドレットの RequiredVersion パラメーターを使用します。例: ModuleVersion = '1.0' |
GUID 次のコマンドを入力します: GUID |
'<GUID>' |
このモジュールを一意に識別するために使用される ID。 値が指定されていない場合は、New-ModuleManifest によって値が自動生成されます。 現在、GUID をしてモジュールをインポートすることはできません。 例: GUID = 'cfc45206-1e49-459d-a8ad-5b571ef94857' |
Author 次のコマンドを入力します: String |
'<Current user>' |
このモジュールの作成者。 値が指定されていない場合、New-ModuleManifest は現在のユーザーを使用します。 例: Author = 'AuthorNameHere' |
CompanyName 次のコマンドを入力します: String |
'Unknown' |
このモジュールの会社またはベンダー。 値が指定されていない場合、New-ModuleManifest は既定値を使用します。例: CompanyName = 'Fabrikam' |
著作権 次のコマンドを入力します: String |
'(c) <Author>. All rights reserved.' |
このモジュールの著作権に関する声明。 値が指定されていない場合、New-ModuleManifest は現在のユーザーの既定値を <Author> として使用します。 作成者を指定するには、Author パラメーターを使用します。 例: Copyright = '2019 AuthorName. All rights reserved.' |
説明 次のコマンドを入力します: String |
<empty string> |
このモジュールで提供される機能の説明。 例: Description = 'This is the module's description.' |
PowerShellVersion 次のコマンドを入力します: Version |
<empty string> |
このモジュールで必要な PowerShell エンジンの最小バージョン。 有効な値は、1.0、2.0、3.0、4.0、5.0、5.1、6.0、6.1、6.2、7.0、7.1 です。 例: PowerShellVersion = '5.0' |
PowerShellHostName の 次のコマンドを入力します: String |
<empty string> |
このモジュールで必要な PowerShell ホストの名前。 この名前は PowerShell によって提供されます。 ホスト・プログラムの名前を見つけるには、プログラムに「$Host.Name 」と入力します。例: PowerShellHostName = 'ConsoleHost' |
PowerShellHostVersion の 次のコマンドを入力します: Version |
<empty string> |
このモジュールで必要な PowerShell ホストの最小バージョン。 例: PowerShellHostVersion = '2.0' |
DotNetFrameworkVersion の 次のコマンドを入力します: Version |
<empty string> |
このモジュールで必要な Microsoft .NET Framework の最小バージョン。 この前提条件は、Windows PowerShell 5.1 などの PowerShell Desktop エディションでのみ有効であり、4.5 未満の .NET Framework バージョンにのみ適用されます。 例: DotNetFrameworkVersion = '3.5' |
CLRVersion 次のコマンドを入力します: Version |
<empty string> |
このモジュールで必要な共通言語ランタイム (CLR) の最小バージョン。 この前提条件は、Windows PowerShell 5.1 などの PowerShell Desktop エディションでのみ有効であり、4.5 未満の .NET Framework バージョンにのみ適用されます。 例: CLRVersion = '3.5' |
ProcessorArchitecture 次のコマンドを入力します: ProcessorArchitecture |
<empty string> |
このモジュールで必要なプロセッサ アーキテクチャ (None、X86、Amd64)。 有効な値は、x86、AMD64、Arm、IA64、MSIL、および None (不明または未指定) です。 例: ProcessorArchitecture = 'x86' |
RequiredModules 次のコマンドを入力します: Object[] |
@() |
このモジュールをインポートする前にグローバル環境にインポートする必要があるモジュール。 これにより、既に読み込まれていないモジュールが読み込まれます。 たとえば、一部のモジュールは別のモジュールによって既に読み込まれている可能性があります。
ModuleVersion ではなく、RequiredVersion を使用して読み込む特定のバージョンを指定できます。
ModuleVersion を使用すると、使用可能な最新バージョンが、指定された最小バージョンで読み込まれます。 パラメーター値に文字列とハッシュ テーブルを組み合わせることができます。例: RequiredModules = @("MyModule", @{ModuleName="MyDependentModule"; ModuleVersion="2.0"; GUID="cfc45206-1e49-459d-a8ad-5b571ef94857"}) 例: RequiredModules = @("MyModule", @{ModuleName="MyDependentModule"; RequiredVersion="1.5"; GUID="cfc45206-1e49-459d-a8ad-5b571ef94857"}) |
RequiredAssemblies の 次のコマンドを入力します: String[] |
@() |
このモジュールをインポートする前に読み込む必要があるアセンブリ。 モジュールに必要なアセンブリ (.dll ) ファイル名を指定します。PowerShell は、型または形式の更新、入れ子になったモジュールのインポート、または RootModule キーの値で指定されたモジュール ファイルのインポートを行う前に、指定されたアセンブリを読み込みます。 このパラメーターを使用して、モジュールに必要なすべてのアセンブリを一覧表示します。 例: RequiredAssemblies = @("assembly1.dll", "assembly2.dll", "assembly3.dll") |
ScriptsToProcess 次のコマンドを入力します: String[] |
@() |
モジュールのインポート時に呼び出し元のセッション状態で実行されるスクリプト (.ps1 ) ファイル。 これは、グローバル セッション状態、または入れ子になったモジュールの場合は、別のモジュールのセッション状態です。 これらのスクリプトを使用して、ログイン スクリプトを使用する場合と同様に環境を準備できます。これらのスクリプトは、マニフェストに一覧表示されているモジュールのいずれかが読み込まれる前に実行されます。 例: ScriptsToProcess = @("script1.ps1", "script2.ps1", "script3.ps1") |
TypesToProcess 次のコマンドを入力します: String[] |
@() |
このモジュールをインポートするときに読み込むファイル (.ps1xml ) を入力します。 例: TypesToProcess = @("type1.ps1xml", "type2.ps1xml", "type3.ps1xml") |
FormatsToProcess 次のコマンドを入力します: String[] |
@() |
このモジュールをインポートするときに読み込むファイル (.ps1xml ) をフォーマットします。 例: FormatsToProcess = @("format1.ps1xml", "format2.ps1xml", "format3.ps1xml") |
NestedModules の 次のコマンドを入力します: Object[] |
@() |
rootModule で指定されたモジュールの入れ子になったモジュールとしてインポートするモジュール (エイリアス:ModuleToProcess)。 この要素にモジュール名を追加することは、スクリプトまたはアセンブリ コード内から Import-Module を呼び出すことと似ています。 マニフェスト ファイルを使用する主な違いは、読み込んでいる内容を簡単に確認できることです。 また、モジュールの読み込みに失敗した場合、実際のモジュールはまだ読み込まれていません。他のモジュールに加えて、スクリプト ( .ps1 ) ファイルをここに読み込むこともできます。 これらのファイルは、ルート モジュールのコンテキストで実行されます。 これは、ルート モジュール内のスクリプトをドット ソーシングすることと同じです。 例: NestedModules = @("script.ps1", @{ModuleName="MyModule"; ModuleVersion="1.0.0.0"; GUID="50cdb55f-5ab7-489f-9e94-4ec21ff51e59"}) |
FunctionsToExport 次のコマンドを入力します: String[] |
@() |
このモジュールからエクスポートする関数を指定します。最適なパフォーマンスを得るために、ワイルドカードを使用せず、エントリを削除しません。エクスポートする関数がない場合は空の配列を使用します。 既定では、関数はエクスポートされません。 このキーを使用して、モジュールによってエクスポートされる関数を一覧表示できます。 モジュールは、関数を呼び出し元のセッション状態にエクスポートします。 呼び出し元のセッション状態は、グローバル セッション状態にすることも、入れ子になったモジュールの場合は別のモジュールのセッション状態にすることもできます。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされるすべての関数は、チェーン内のモジュールが FunctionsToExport キーを使用して関数を制限しない限り、グローバル セッション状態にエクスポートされます。 マニフェストが関数のエイリアスをエクスポートする場合、このキーは、エイリアスが AliasesToExport キーにリストされている関数を削除できますが、このキーは関数エイリアスをリストに追加できません。 例: FunctionsToExport = @("function1", "function2", "function3") |
CmdletsToExport 次のコマンドを入力します: String[] |
@() |
このモジュールからエクスポートするコマンドレットを指定します。最適なパフォーマンスを得るために、ワイルドカードを使用せず、エントリを削除しません。エクスポートするコマンドレットがない場合は空の配列を使用します。 既定では、コマンドレットはエクスポートされません。 このキーを使用して、モジュールによってエクスポートされるコマンドレットを一覧表示できます。 呼び出し元のセッション状態は、グローバル セッション状態にすることも、入れ子になったモジュールの場合は別のモジュールのセッション状態にすることもできます。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされるすべてのコマンドレットは、チェーン内のモジュールが CmdletsToExport キーを使用してコマンドレットを制限しない限り、グローバル セッション状態にエクスポートされます。 マニフェストがコマンドレットのエイリアスをエクスポートする場合、このキーは、エイリアスが AliasesToExport キーにリストされているコマンドレットを削除できますが、このキーはコマンドレットエイリアスをリストに追加できません。 例: CmdletsToExport = @("Get-MyCmdlet", "Set-MyCmdlet", "Test-MyCmdlet") |
VariablesToExport 次のコマンドを入力します: String[] |
'*' |
モジュールが呼び出し元のセッション状態にエクスポートする変数を指定します。 ワイルドカード文字を使用できます。 既定では、すべての変数 ('*' ) がエクスポートされます。 このキーを使用して、モジュールによってエクスポートされる変数を制限できます。呼び出し元のセッション状態は、グローバル セッション状態にすることも、入れ子になったモジュールの場合は別のモジュールのセッション状態にすることもできます。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされるすべての変数は、チェーン内のモジュールが VariablesToExport キーを使用して変数を制限しない限り、グローバル セッション状態にエクスポートされます。 マニフェストが変数のエイリアスもエクスポートする場合、このキーは、エイリアスが AliasesToExport キーにリストされている変数を削除できますが、このキーは変数エイリアスをリストに追加できません。 例: VariablesToExport = @('$MyVariable1', '$MyVariable2', '$MyVariable3') |
AliasesToExport 次のコマンドを入力します: String[] |
@() |
このモジュールからエクスポートするエイリアスを指定します。最適なパフォーマンスを得るために、ワイルドカードを使用せず、エントリを削除せず、エクスポートするエイリアスがない場合は空の配列を使用します。 既定では、エイリアスはエクスポートされません。 このキーを使用して、モジュールによってエクスポートされるエイリアスを一覧表示できます。 モジュールは、エイリアスを呼び出し元のセッション状態にエクスポートします。 呼び出し元のセッション状態は、グローバル セッション状態にすることも、入れ子になったモジュールの場合は別のモジュールのセッション状態にすることもできます。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされるすべてのエイリアスは、チェーン内のモジュールが AliasesToExport キーを使用してエイリアスを制限しない限り、最終的にはグローバル セッション状態にエクスポートされます。 例: AliasesToExport = @("MyAlias1", "MyAlias2", "MyAlias3") |
DscResourcesToExport 次のコマンドを入力します: String[] |
@() |
このモジュールからエクスポートする DSC リソースを指定します。 ワイルドカードを使用できます。 例: DscResourcesToExport = @("DscResource1", "DscResource2", "DscResource3") |
ModuleList 次のコマンドを入力します: Object[] |
@() |
このモジュールと共にパッケージ化されるすべてのモジュールを指定します。 これらのモジュールは、名前、コンマ区切りの文字列を使用して入力することも、ModuleName と GUID キー ハッシュ テーブルとして入力することもできます。 ハッシュ テーブルには、ModuleVersion キー 省略可能です。
ModuleList キーは、モジュール インベントリとして機能するように設計されています。 これらのモジュールは自動的には処理されません。 例: ModuleList = @("SampleModule", "MyModule", @{ModuleName="MyModule"; ModuleVersion="1.0.0.0"; GUID="50cdb55f-5ab7-489f-9e94-4ec21ff51e59"}) |
FileList 次のコマンドを入力します: String[] |
@() |
このモジュールでパッケージ化されたすべてのファイルの一覧。
ModuleListと同様に、FileList はインベントリ リストであり、それ以外の場合は処理されません。 例: FileList = @("File1", "File2", "File3") |
PrivateData 次のコマンドを入力します: Object |
@{...} |
RootModule (エイリアス: ModuleToProcess) キーで指定されたルート モジュールに渡す必要があるプライベート データを指定します。 PrivateData は、Tags、LicenseUri、ProjectURI、IconUri、ReleaseNotes、プレリリース、RequireLicenseAcceptance、および ExternalModuleDependencies をします。 |
タグ 次のコマンドを入力します: String[] |
@() |
タグは、オンライン ギャラリーでのモジュール検出に役立ちます。 例: Tags = "PackageManagement", "PowerShell", "Manifest" |
LicenseUri 次のコマンドを入力します: Uri |
<empty string> |
このモジュールのライセンスの URL。 例: LicenseUri = 'https://www.contoso.com/license' |
ProjectUri 次のコマンドを入力します: Uri |
<empty string> |
このプロジェクトのメイン Web サイトへの URL。 例: ProjectUri = 'https://www.contoso.com/project' |
IconUri 次のコマンドを入力します: Uri |
<empty string> |
このモジュールを表すアイコンの URL。 例: IconUri = 'https://www.contoso.com/icons/icon.png' |
ReleaseNotes 次のコマンドを入力します: String |
<empty string> |
モジュールのリリース ノートを指定します。 例: ReleaseNotes = 'The release notes provide information about the module. |
プレリリース の 次のコマンドを入力します: String |
<empty string> |
このパラメーターは、PowerShellGet 1.6.6 で追加されました。
PreRelease、モジュールをオンライン ギャラリーのプレリリース バージョンとして識別する文字列です。 例: PreRelease = 'alpha' |
RequireLicenseAcceptance の 次のコマンドを入力します: Boolean |
$false |
このパラメーターは PowerShellGet 1.5 で追加されました。 モジュールがインストール、更新、または保存に明示的なユーザーの同意を必要とするかどうかを示すフラグ。 例: RequireLicenseAcceptance = $false |
ExternalModuleDependencies の 次のコマンドを入力します: String[] |
@() |
このパラメーターは PowerShellGet v2 で追加されました。 このモジュールが依存している外部モジュールの一覧。 例: ExternalModuleDependencies = @("ExtModule1", "ExtModule2", "ExtModule3") |
HelpInfoURI 次のコマンドを入力します: String |
<empty string> |
このモジュールの HelpInfo URI。 例: HelpInfoURI = 'https://www.contoso.com/help' |
DefaultCommandPrefix の 次のコマンドを入力します: String |
<empty string> |
このモジュールからエクスポートされたコマンドの既定のプレフィックス。
Import-Module -Prefix を使用して既定のプレフィックスをオーバーライドします。 例: DefaultCommandPrefix = 'My' |
サンプル モジュール マニフェスト
次のサンプル モジュール マニフェストは、PowerShell 7 で New-ModuleManifest
で作成され、既定のキーと値が含まれています。
#
# Module manifest for module 'SampleModuleManifest'
#
# Generated by: User01
#
# Generated on: 10/15/2019
#
@{
# Script module or binary module file associated with this manifest.
# RootModule = ''
# Version number of this module.
ModuleVersion = '0.0.1'
# Supported PSEditions
# CompatiblePSEditions = @()
# ID used to uniquely identify this module
GUID = 'b632e90c-df3d-4340-9f6c-3b832646bf87'
# Author of this module
Author = 'User01'
# Company or vendor of this module
CompanyName = 'Unknown'
# Copyright statement for this module
Copyright = '(c) User01. All rights reserved.'
# Description of the functionality provided by this module
# Description = ''
# Minimum version of the PowerShell engine required by this module
# PowerShellVersion = ''
# Name of the PowerShell host required by this module
# PowerShellHostName = ''
# Minimum version of the PowerShell host required by this module
# PowerShellHostVersion = ''
# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# DotNetFrameworkVersion = ''
# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# CLRVersion = ''
# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''
# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()
# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()
# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()
# Format files (.ps1xml) to be loaded when importing this module
# FormatsToProcess = @()
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @()
# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @()
# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()
# Variables to export from this module
VariablesToExport = '*'
# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
AliasesToExport = @()
# DSC resources to export from this module
# DscResourcesToExport = @()
# List of all modules packaged with this module
# ModuleList = @()
# List of all files packaged with this module
# FileList = @()
# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{
PSData = @{
# Tags applied to this module. These help with module discovery in online galleries.
# Tags = @()
# A URL to the license for this module.
# LicenseUri = ''
# A URL to the main website for this project.
# ProjectUri = ''
# A URL to an icon representing this module.
# IconUri = ''
# ReleaseNotes of this module
# ReleaseNotes = ''
# Prerelease string of this module
# Prerelease = ''
# Flag to indicate whether the module requires explicit user acceptance for install/update/save
# RequireLicenseAcceptance = $false
# External dependent modules of this module
# ExternalModuleDependencies = @()
} # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfo URI of this module
# HelpInfoURI = ''
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''
}
こちらもご覧ください
- 比較演算子について
- about_If
- グローバル アセンブリ キャッシュ
- Import-Module
- New-ModuleManifest
- Test-ModuleManifest
- Update-ModuleManifest
- Windows PowerShell モジュール の作成の
PowerShell