PowerShell モジュール マニフェストを記述する方法
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 では、モジュール マニフェスト ファイルで使用できる操作の小さなサブセットのみが実行されます。 一般に、 ステートメント、算術演算子と比較演算子、および基本的な PowerShell データ型
if
を使用できます。モジュール マニフェストを作成したら、それをテストして、マニフェストに記述されているパスが正しいか確認できます。 モジュール マニフェストをテストするには 、Test-ModuleManifest を使用します。
Test-ModuleManifest myModuleName.psd1
モジュール マニフェストが、モジュールを含むディレクトリのトップ レベルに配置されている必要があります。
モジュールをシステムにコピーしてインポートすると、PowerShell はモジュール マニフェストを使用してモジュールをインポートします。
必要に応じて、マニフェスト自体をドット ソーシングすることで 、Import-Module の呼び出しでモジュール マニフェストを直接テストできます。
Import-Module .\myModuleName.psd1
モジュール マニフェスト要素
次の表では、モジュール マニフェストに含め可能な要素について説明します。
要素 | Default | 説明 |
---|---|---|
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' |
作成者 型: 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の最小バージョン。 この前提条件は、PowerShell 5.1 などの PowerShell Desktop エディションでのみ有効です。 例: DotNetFrameworkVersion = '3.5' |
CLRVersion 型: Version |
<empty string> |
このモジュールに必要な共通言語ランタイム (CLR) の最小バージョン。 この前提条件は、PowerShell 5.1 などの PowerShell Desktop エディションでのみ有効です。 例: CLRVersion = '3.5' |
ProcessorArchitecture 型: ProcessorArchitecture |
<empty string> |
このモジュールで必要なプロセッサ アーキテクチャ (None、X86、Amd64)。 有効な値は、x86、AMD64、Arm、IA64、MSIL、None (不明または未指定) です。 例: ProcessorArchitecture = 'x86' |
RequiredModules 型: Object[] |
@() |
このモジュールをインポートする前にグローバル環境にインポートする必要があるモジュール。 これにより、既に読み込まれている場合を限り、一覧表示されているモジュールが読み込まれます。 たとえば、別のモジュールによって一部のモジュールが既に読み込まれている場合があります。 ではなく を使用して、読み込む特定のバージョン RequiredVersion を指定できます ModuleVersion 。 を 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"}) |
必須アセンブリ 型: 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[] |
@() |
このモジュールからエクスポートするコマンドレットを指定します。パフォーマンスを最適化するために、ワイルドカードを使用しないか、エントリを削除しないか、エクスポートするコマンドレットがない場合は空の配列を使用します。 既定では、コマンドレットはエクスポートされません。 このキーを使用すると、モジュールによってエクスポートされるコマンドレットを一覧表示できます。 呼び出し元のセッション状態は、グローバル セッション状態、または入れ子になったモジュールの場合は、別のモジュールのセッション状態になります。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされたコマンドレットはすべて、 コマンドレットを 使用してコマンドレットを制限しない限り、グローバル セッション状態にエクスポートされます。 マニフェストがコマンドレットのエイリアスをエクスポートする場合、このキーはエイリアスが AliasesToExport キーに一覧表示されているコマンドレットを削除できますが、このキーではコマンドレットエイリアスを一覧に追加できません。 例: CmdletsToExport = @("Get-MyCmdlet", "Set-MyCmdlet", "Test-MyCmdlet") |
VariablesToExport 型: String[] |
'*' |
モジュールが呼び出し元のセッション状態にエクスポートする変数を指定します。 ワイルドカード文字を使用できます。 既定では、すべての変数 ( '*' ) がエクスポートされます。 このキーを使用して、モジュールによってエクスポートされる変数を制限できます。呼び出し元のセッション状態は、グローバル セッション状態、または入れ子になったモジュールの場合は、別のモジュールのセッション状態になります。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされた変数はすべて、チェーン内のモジュールが VariablesToExport キーを使用して変数を制限しない限り、グローバル セッション状態にエクスポートされます。 マニフェストで変数のエイリアスもエクスポートされる場合、このキーはエイリアスが AliasesToExport キーに一覧表示されている変数を削除できますが、このキーでは変数エイリアスを一覧に追加できません。 例: VariablesToExport = @('$MyVariable1', '$MyVariable2', '$MyVariable3') |
AliasesToExport 型: String[] |
@() |
このモジュールからエクスポートするエイリアスを指定します。パフォーマンスを最適化するために、ワイルドカードを使用しないか、エントリを削除しないか、エクスポートするエイリアスがない場合は空の配列を使用します。 既定では、エイリアスはエクスポートされません。 このキーを使用すると、モジュールによってエクスポートされるエイリアスを一覧表示できます。 モジュールは、エイリアスを呼び出し元のセッション状態にエクスポートします。 呼び出し元のセッション状態は、グローバル セッション状態、または入れ子になったモジュールの場合は、別のモジュールのセッション状態になります。 入れ子になったモジュールをチェーンする場合、入れ子になったモジュールによってエクスポートされたエイリアスはすべて、チェーン内のモジュールが AliassToExport キーを使用してエイリアスを制限しない限り、最終的にグローバル セッション状態にエクスポートされます。 例: 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 は、タグ 、LicenseUri、ProjectURI、IconUri、ReleaseNotes、Prerelease、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 = 'This module is a prerelease version. |
RequireLicenseAcceptance 型: Boolean |
$true |
このパラメーターは 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 = $true
# 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 = ''
}
関連項目
フィードバック
フィードバックの送信と表示