about_Module_Manifests
簡単な説明
モジュール マニフェスト ファイルを記述するための設定とプラクティスについて説明します。
長い説明
モジュール マニフェストは、ハッシュ テーブルを含む PowerShell データ ファイル (.psd1
) です。
ハッシュ テーブルのキーと値のペアは、モジュールの内容と属性を記述し、前提条件を定義し、コンポーネントの処理方法を制御します。
マニフェストはモジュールを読み込むには必要ありませんが、モジュールをPowerShell ギャラリーに発行する必要があります。 マニフェストを使用すると、モジュールの実装を読み込み方法から分離することもできます。 マニフェストを使用すると、要件、互換性、読み込み順序などを定義できます。
マニフェストの設定にパラメーターを指定せずに を使用 New-ModuleManifest
すると、最小限のマニフェスト ファイルが書き込まれます。 次のスニペットは、この既定の出力を示しています。簡潔にするために解説と間隔が切り取られています。
@{
# RootModule = ''
ModuleVersion = '1.0'
# CompatiblePSEditions = @()
GUID = 'e7184b71-2527-469f-a50e-166b612dfb3b'
Author = 'username'
CompanyName = 'Unknown'
Copyright = '(c) 2022 username. All rights reserved.'
# Description = ''
# PowerShellVersion = ''
# PowerShellHostName = ''
# PowerShellHostVersion = ''
# DotNetFrameworkVersion = ''
# CLRVersion = ''
# ProcessorArchitecture = ''
# RequiredModules = @()
# RequiredAssemblies = @()
# ScriptsToProcess = @()
# TypesToProcess = @()
# FormatsToProcess = @()
# NestedModules = @()
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = '*'
AliasesToExport = @()
# DscResourcesToExport = @()
# ModuleList = @()
# FileList = @()
PrivateData = @{
PSData = @{
# Tags = @()
# LicenseUri = ''
# ProjectUri = ''
# IconUri = ''
# ReleaseNotes = ''
} # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfoURI = ''
# DefaultCommandPrefix = ''
}
を使用 Test-ModuleManifest
して、モジュールを発行する前にモジュール マニフェストを検証できます。 Test-ModuleManifest
マニフェストが無効な場合、またはセッションがマニフェストで設定されている要件を満たしていないため、モジュールを現在のセッションにインポートできない場合は、エラーを返します。
モジュール マニフェストでのスクリプト コードの使用
マニフェスト ファイルの設定に割り当てられた値には、PowerShell によって評価される式を指定できます。 これにより、パスを構築し、変数に基づいて値を条件付きで割り当てることができます。
を使用して Import-Module
モジュールをインポートすると、マニフェストは言語モードで Restricted
評価されます。 Restricted
mode は、使用できるコマンドと変数を制限します。
使用できるコマンド
Import-LocalizedData
ConvertFrom-StringData
Write-Host
Out-Host
Join-Path
使用できる変数
$PSScriptRoot
$PSEdition
$EnabledExperimentalFeatures
- などの任意の環境変数
$ENV:TEMP
詳細については、「 about_Language_Modes」を参照してください。
マニフェストの設定
次のセクションでは、モジュール マニフェストで使用可能なすべての設定とその使用方法について詳しく説明します。 これらは、設定の概要から始まり、その後に一覧表示されるマトリックスが続きます。
- 入力の種類: マニフェストでこの設定に指定できるオブジェクトの種類。
- 必須: この値が の場合、
Yes
モジュールのインポートとPowerShell ギャラリーへの発行の両方に設定が必要です。 のNo
場合は、どちらも必要ありません。 のPowerShell Gallery
場合は、PowerShell ギャラリーへの発行にのみ必要です。 - [未設定の場合の値]: インポート時にこの設定に含まれる値であり、明示的に設定されていません。
- ワイルドカードを受け入れる: この設定でワイルドカード値を使用できるかどうか。
RootModule
この設定では、モジュールのプライマリ ファイルまたはルート ファイルを指定します。 モジュールがインポートされると、ルート モジュール ファイルによってエクスポートされたメンバーが呼び出し元のセッション状態にインポートされます。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
値は、次のいずれかのパスである必要があります。
- スクリプト (
.ps1
) - スクリプト モジュール (
.psm1
) - モジュール マニフェスト (
.psd1
) - アセンブリ (
.dll
) - コマンドレット定義 XML ファイル (
.cdxml
) - Windows PowerShell 5.1 ワークフロー (
.xaml
)
パスは、モジュール マニフェストに対する相対パスである必要があります。
モジュール マニフェストに RootModule キーで指定されたルート ファイルがない場合、マニフェストはモジュールのプライマリ ファイルになり、モジュールはマニフェスト モジュール (ModuleType = Manifest) になります。 RootModule が定義されている場合、モジュールの型は、使用されるファイル拡張子から決定されます。
.ps1
または.psm1
ファイルを指定すると、モジュールの種類が Script になります- ファイルによって
.psd1
モジュールの種類が Manifest になります - ファイルによって
.dll
モジュールの型が Binary になります - ファイルによって
.cdxml
モジュールの種類が CIM になります - ファイルによって
.xaml
モジュールの種類が Workflow になります
既定では、 RootModule 内のすべてのモジュール メンバーがエクスポートされます。
ヒント
モジュールの読み込み速度は、 バイナリ、 スクリプト、 CIM モジュールの種類によって異なります。 詳細については、「PowerShell モジュールの作成に関する考慮事項」を参照してください。
たとえば、このモジュールの ModuleType は Manifest です。 このモジュールでエクスポートできるモジュール メンバーは、 NestedModules 設定で指定されたモジュールで定義されているメンバーだけです。
@{
RootModule = ''
}
注意
この設定は、モジュール マニフェストで ModuleToProcess として指定することもできます。 この設定の名前は有効ですが、代わりに RootModule を使用することをお勧めします。
ModuleVersion
この設定では、モジュールのバージョンを指定します。 システム上にモジュールの複数のバージョンが存在する場合、 を実行 Import-Module
すると、既定で最新バージョンが読み込まれます。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | Yes |
未設定の場合の値 | なし |
ワイルドカードを受け入れます | いいえ |
この設定の値は、 を実行Import-Module
するときに にSystem.Version
変換できる必要があります。
たとえば、このマニフェストはモジュールのバージョンを として '1.2.3'
宣言します。
@{
ModuleVersion = '1.2.3'
}
モジュールをインポートして Version プロパティを調べるときは、文字列ではなく System.Version オブジェクトであることに注意してください。
$ExampleModule = Import-Module example.psd1
$ExampleModule.Version
$ExampleModule.Version.GetType().Name
Major Minor Build Revision
----- ----- ----- --------
1 2 3 -1
Version
CompatiblePSEditions
この設定では、モジュールの互換性のある PSEdition を指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
受け入れ可能な値 | Desktop , Core |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定の値が の場合、 $null
セッションの PSEdition に関係なく、モジュールをインポートできます。 この値は、受け入れ可能な値の 1 つ以上に設定できます。
PSEdition の詳細については、次を参照してください。
この設定が定義されている場合、モジュールは、自動変数の値が $PSEdition
設定に含まれるセッションにのみインポートできます。
注意
自動変数は$PSEdition
バージョン 5.1 で導入されたため、古いバージョンの Windows PowerShell は CompatiblePSEditions 設定を使用するモジュールを読み込めませんでした。
たとえば、次のモジュール マニフェストを任意のセッションにインポートできます。
@{
# CompatiblePSEditions = @()
}
設定を指定すると、このモジュールは、自動変数の値Core
が $PSEdition
であるセッションでのみインポートできます。
@{
CompatiblePSEditions = @('Core')
}
GUID
この設定では、モジュールの一意識別子を指定します。 GUID は、同じ名前のモジュールを区別するために使用されます。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | 00000000-0000-0000-0000-000000000000 |
ワイルドカードを受け入れます | いいえ |
この設定の値は、 を実行Import-Module
するときに にSystem.Guid
変換できる必要があります。
注意事項
必須の設定ではありませんが、マニフェストで GUID を 指定しない場合は利点がなく、モジュールの名前の競合につながる可能性があります。
マニフェストで使用する新しい guid を作成できます。
New-Guid | Select-Object -ExpandProperty Guid
8456b025-2fa5-4034-ae47-e6305f3917ca
@{
GUID = '8456b025-2fa5-4034-ae47-e6305f3917ca'
}
マシン上に同じ名前の別のモジュールがある場合でも、モジュールの完全修飾名を指定して必要なモジュールをインポートできます。
Import-Module -FullyQualifiedName @{
ModuleName = 'Example'
GUID = '8456b025-2fa5-4034-ae47-e6305f3917ca'
ModuleVersion = '1.0.0'
}
Author
この設定は、モジュール作成者を識別します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | PowerShell ギャラリー |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
このマニフェストは、モジュールの作成者が Contoso 開発者エクスペリエンス チームであることを宣言します。
@{
Author = 'Contoso Developer Experience Team'
}
CompanyName
この設定は、モジュールを作成した会社またはベンダーを識別します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
このマニフェストは、モジュールが Contoso, Ltd によって作成されたことを宣言します。
@{
CompanyName = 'Contoso, Ltd.'
}
Copyright
この設定では、モジュールの copyright ステートメントを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
このマニフェストは、2022 年の時点で Contoso, Ltd. に対するすべての権利を予約する著作権に関する声明を宣言しています。
@{
Copyright = '(c) 2022 Contoso, Ltd. All rights reserved.'
}
説明
この設定では、モジュールについて大まかに説明します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | PowerShell ギャラリー |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
このマニフェストには、簡単な説明が含まれています。 また、here-string を使用して、より長いまたは複数行の説明を記述することもできます。
@{
Description = 'Example commands to show a valid module manifest'
}
PowerShellVersion
この設定では、このモジュールで必要な PowerShell の最小バージョンを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定の値は、 を実行Import-Module
するときに にSystem.Version
変換できる必要があります。
この設定が設定されていない場合、PowerShell は現在のバージョンに基づいてモジュールのインポートを制限しません。
たとえば、このマニフェストでは、モジュールが PowerShell とWindows PowerShellのすべてのバージョンと互換性があることを宣言します。
@{
# PowerShellVersion = ''
}
PowerShellVersion を に7.2
設定すると、PowerShell 7.2 以降でのみモジュールをインポートできます。
@{
PowerShellVersion = '7.2'
}
PowerShellHostName
この設定では、ISE ホストや ConsoleHost など、モジュールで必要な PowerShell ホスト プログラムWindows PowerShell名前を指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
ステートメントを使用して、セッションのホストの名前を $Host.Name
見つけることができます。 たとえば、リモート セッションのホストが ConsoleHost ではなく ServerRemoteHost であることがわかります。
$Host.Name
Enter-PSSession -ComputerName localhost
$Host.Name
ConsoleHost
[localhost]: PS C:\Users\username\Documents> $Host.Name
ServerRemoteHost
このモジュールは、任意のホストにインポートできます。
@{
# PowerShellHostName = ''
}
PowerShellHostName を にServerRemoteHost
設定すると、リモート PowerShell セッションでのみモジュールをインポートできます。
@{
PowerShellHostName = 'ServerRemoteHost'
}
PowerShellHostVersion
この設定では、モジュールに必要な PowerShell ホスト プログラムの最小バージョンを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定の値は、 を実行Import-Module
するときに にSystem.Version
変換できる必要があります。
注意事項
この設定は PowerShellHostName 設定なしで使用できますが、予期しない動作の確率が高くなります。 この設定は、 PowerShellHostName 設定も使用している場合にのみ使用します。
たとえば、このマニフェストのモジュールは、ホストのバージョンに関係なく、 ConsoleHost で実行されている任意の PowerShell セッションからインポートできます。
@{
PowerShellHostName = 'ConsoleHost'
# PowerShellHostVersion = ''
}
PowerShellHostVersion を に5.1
設定すると、ホストのバージョンが 5.1 以上の ConsoleHost で実行されている PowerShell セッションからのみモジュールをインポートできます。
@{
PowerShellHostName = 'ConsoleHost'
PowerShellHostVersion = '5.1'
}
DotNetFrameworkVersion
この設定では、モジュールに必要な Microsoft .NET Frameworkの最小バージョンを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
注意
この設定は、PowerShell Desktop エディション (Windows PowerShell 5.1 など) でのみ有効であり、4.5 より小さいバージョン.NET Frameworkにのみ適用されます。 この要件は、新しいバージョンの PowerShell や.NET Frameworkには影響しません。
この設定の値は、 を実行Import-Module
するときに にSystem.Version
変換できる必要があります。
たとえば、このマニフェストは、Microsoft .NET Frameworkのバージョンに関係なく、そのモジュールを任意の PowerShell またはWindows PowerShell セッションにインポートできることを宣言します。
@{
# DotNetFrameworkVersion = ''
}
DotNetFrameworkVersion を に4.0
設定すると、Microsoft .NET Frameworkの最新バージョンが 4.0 以上であるWindows PowerShellの任意のセッションでこのモジュールをインポートできます。 任意の PowerShell セッションでインポートすることもできます。
@{
DotNetFrameworkVersion = '4.0'
}
CLRVersion
この設定では、モジュールに必要な Microsoft .NET Frameworkの共通言語ランタイム (CLR) の最小バージョンを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
注意
この設定は、PowerShell Desktop エディション (Windows PowerShell 5.1 など) でのみ有効であり、4.5 より小さいバージョン.NET Frameworkにのみ適用されます。 この要件は、新しいバージョンの PowerShell や.NET Frameworkには影響しません。
この設定の値は、 を実行Import-Module
するときに にSystem.Version
変換できる必要があります。
たとえば、このマニフェストは、Microsoft .NET Framework の CLR バージョンのバージョンに関係なく、そのモジュールを任意の PowerShell またはWindows PowerShell セッションにインポートできることを宣言します。
@{
# CLRVersion = ''
}
CLRVersion を に4.0
設定すると、使用可能な CLR の最新バージョンが 4.0 以上であるWindows PowerShellの任意のセッションにこのモジュールをインポートできます。 任意の PowerShell セッションでインポートすることもできます。
@{
CLRVersion = '4.0'
}
ProcessorArchitecture
この設定では、モジュールに必要なプロセッサ アーキテクチャを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
受け入れ可能な値 | None , MSIL , X86 , IA64 , Amd64 , Arm |
必須 | いいえ |
未設定の場合の値 | None |
ワイルドカードを受け入れます | いいえ |
この設定の値は、 を実行Import-Module
するときに にSystem.Reflection.ProcessorArchitecture
変換できる必要があります。
たとえば、このマニフェストは、システムのプロセッサ アーキテクチャに関係なく、そのモジュールを任意のセッションにインポートできることを宣言します。
@{
# ProcessorArchitecture = ''
}
ProcessorArchitecture を にAmd64
設定すると、このモジュールは、一致するアーキテクチャを持つマシンで実行されているセッションでのみインポートできます。
@{
ProcessorArchitecture = 'Amd64'
}
RequiredModules
この設定では、グローバル セッション状態である必要があるモジュールを指定します。 必要なモジュールがグローバル セッション状態でない場合、PowerShell によってインポートされます。
必要なモジュールが使用できない場合、コマンドは Import-Module
失敗します。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] , System.Collections.Hashtable[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定のエントリには、モジュール名、完全なモジュール仕様、またはモジュール ファイルへのパスを指定できます。
値がパスの場合、パスは完全修飾または相対パスにすることができます。
値が名前またはモジュールの指定である場合、PowerShell は PSModulePath で指定されたモジュールを検索します。
モジュール仕様は、次のキーを持つハッシュ テーブルです。
ModuleName
- 必須。 モジュール名を指定します。GUID
- 省略可能。 モジュールの GUID を指定します。- また、以下の 3 つのキーのうち少なくとも 1 つを指定する 必要 もあります。 キーは
RequiredVersion
またはMaximumVersion
キーと共にModuleVersion
使用できません。 と キーを一緒に指定することで、モジュールの許容されるバージョン範囲をModuleVersion
MaximumVersion
定義できます。ModuleVersion
- モジュールの最小許容バージョンを指定します。RequiredVersion
- モジュールの正確で必要なバージョンを指定します。MaximumVersion
- モジュールの許容される最大バージョンを指定します。
注意
RequiredVersion
は、Windows PowerShell 5.0 で追加されました。
MaximumVersion
は、Windows PowerShell 5.1 で追加されました。
たとえば、このマニフェストは、そのモジュールがその機能に他のモジュールを必要としないことを宣言します。
@{
# RequiredModules = @()
}
このマニフェストは、PSReadLine モジュールが必要であることを宣言します。 このマニフェストで を実行 Import-Module
すると、PowerShell によって、セッションで使用できる最新バージョンの PSReadLine がインポートされます。 使用可能なバージョンがない場合、インポートはエラーを返します。
@{
RequiredModules = @(
'PSReadLine'
)
}
ヒント
PowerShell 2.0 では、 Import-Module
必要なモジュールは自動的にインポートされません。 必要なモジュールがグローバル セッション状態にあることを確認するだけです。
このマニフェストでは、独自のモジュール フォルダーにベンダー化された PSReadLine モジュールのバージョンが必要であることを宣言します。 このマニフェストで を実行 Import-Module
すると、PowerShell は指定したパスからベンダー化された PSReadLine をインポートします。
@{
RequiredModules = @(
'Vendored\PSReadLine\PSReadLine.psd1'
)
}
このマニフェストでは、PSReadLine モジュールのバージョン 2.0.0 が特に必要であることを宣言します。 このマニフェストで を実行 Import-Module
すると、利用可能な場合は、PowerShell によって PSReadLine のバージョン 2.0.0 がインポートされます。 使用できない場合は、 Import-Module
エラーを返します。
@{
RequiredModules = @(
@{
ModuleName = 'PSReadLine'
RequiredVersion = '2.0.0'
}
)
}
このマニフェストでは、PSReadLine モジュールをバージョン 2.0.0 以降でインポートする必要があることを宣言します。
@{
RequiredModules = @(
@{
ModuleName = 'PSReadLine'
ModuleVersion = '2.0.0'
}
)
}
このマニフェストでは、PSReadLine モジュールをバージョン 2.0.0 以降でインポートする必要があることを宣言します。
@{
RequiredModules = @(
@{
ModuleName = 'PSReadLine'
MaximumVersion = '2.0.0'
}
)
}
このマニフェストでは、PSDesiredStateConfiguration モジュールを 2.0.0 以上のバージョンでインポートする必要がありますが、2.99.99 以下であることが宣言されています。
@{
RequiredModules = @(
@{
ModuleName = 'PSDesiredStateConfiguration'
ModuleVersion = '2.0.0'
MaximumVersion = '2.99.99'
}
)
}
RequiredAssemblies
この設定では、モジュールに必要なアセンブリ (.dll
) ファイルを指定します。
PowerShell は、型または形式の更新、入れ子になったモジュールのインポート、または RootModule キーの値で指定されたモジュール ファイルのインポートを行う前に、指定されたアセンブリを読み込みます。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定のエントリには、アセンブリのファイル名、またはアセンブリへのパスを指定できます。 NestedModules 設定でバイナリ モジュールとして一覧表示されている場合でも、必要なすべてのアセンブリを一覧表示します。
このマニフェストにはアセンブリが必要です example.dll
。 このマニフェストで指定された書式ファイルまたは型ファイルを読み込む前に、PowerShell はモジュール マニフェストと同じディレクトリにあるフォルダーからAssemblies
読み込みますexample.dll
。
@{
RequiredAssemblies = @(
'Assemblies\Example.dll'
)
}
ScriptsToProcess
この設定では、モジュールのインポート時に呼び出し元のセッション状態で実行されるスクリプト (.ps1
) ファイルを指定します。 ログイン スクリプトを使用する場合と同様に、これらのスクリプトを使用して、環境を準備できます。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
モジュールのセッション状態で実行するスクリプトを指定するには、NestedModules キーを使用します。
このマニフェストをインポートすると、PowerShell は現在のセッションで を Initialize.ps1
実行します。
@{
ScriptsToProcess = @(
'Scripts\Initialize.ps1'
)
}
たとえば、情報メッセージを書き込み、変数を設定する場合 Initialize.ps1
は、次のようになります $ExampleState
。
if ([string]::IsNullOrEmpty($ExampleState)) {
Write-Information "Example not initialized."
Write-Information "Initializing now..."
$ExampleState = 'Initialized'
} else {
Write-Information "Example already initialized."
}
モジュールをインポートすると、スクリプトが実行され、それらのメッセージと設定 $ExampleState
がセッションに書き込まれます。
$InformationPreference = 'Continue'
"Example State is: $ExampleState"
Import-Module .\example7x.psd1
"Example State is: $ExampleState"
Import-Module .\example7x.psd1 -Force
Example State is:
Example not initialized.
Initializing now...
Example State is: Initialized
Example already initialized.
TypesToProcess
この設定では、モジュールのインポート時に実行される型ファイル (.ps1xml
) を指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
モジュールをインポートすると、PowerShell は指定されたファイルを Update-TypeData
使用して コマンドレットを実行します。 型ファイルはスコープが設定されていないため、セッション内のすべてのセッション状態に影響します。
型ファイルの詳細については、「about_Types.ps1xml」を参照してください。
たとえば、このマニフェストをインポートすると、PowerShell は、モジュール マニフェストと同じディレクトリにあるフォルダーからTypes
ファイルで指定されたExample.ps1xml
型を読み込みます。
@{
TypesToProcess = @(
'Types\Example.ps1xml'
)
}
FormatsToProcess
この設定では、モジュールのインポート時に実行される書式設定ファイル (.ps1xml
) を指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
モジュールをインポートすると、PowerShell は指定されたファイルを Update-FormatData
使用して コマンドレットを実行します。 書式設定ファイルはスコープが設定されていないため、セッション内のすべてのセッション状態に影響します。
ファイルの種類の詳細については、「about_Format.ps1xml」を参照してください。
たとえば、このモジュールをインポートすると、PowerShell は、モジュール マニフェストと同じディレクトリにあるフォルダーからFormats
ファイルで指定されたExample.ps1xml
形式を読み込みます。
@{
FormatsToProcess = @(
'Formats\Example.ps1xml'
)
}
NestedModules
この設定では、モジュールのセッション状態にインポートされるスクリプト モジュール (.psm1
) とバイナリ モジュール (.dll
) を指定します。 スクリプト ファイル (.ps1
) を指定することもできます。 この設定のファイルは、一覧表示されている順序で実行されます。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] , System.Collections.Hashtable[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定のエントリには、モジュール名、完全なモジュール仕様、またはモジュールまたはスクリプト ファイルへのパスを指定できます。
値がパスの場合、パスは完全修飾または相対パスにすることができます。
値がモジュール名または仕様の場合、PowerShell は PSModulePath で指定されたモジュールを検索します。
モジュール仕様は、次のキーを持つハッシュ テーブルです。
ModuleName
- 必須。 モジュール名を指定します。GUID
- 省略可能。 モジュールの GUID を指定します。- また、以下の 3 つのキーのうち少なくとも 1 つを指定する 必要 もあります。 キーは
RequiredVersion
またはMaximumVersion
キーと共にModuleVersion
使用できません。 と キーを一緒に指定することで、モジュールの許容されるバージョン範囲をModuleVersion
MaximumVersion
定義できます。ModuleVersion
- モジュールの最小許容バージョンを指定します。RequiredVersion
- モジュールの正確で必要なバージョンを指定します。MaximumVersion
- モジュールの許容される最大バージョンを指定します。
注意
RequiredVersion
は、Windows PowerShell 5.0 で追加されました。
MaximumVersion
は、Windows PowerShell 5.1 で追加されました。
入れ子になったモジュールからエクスポートする必要がある項目は、 コマンドレットを使用して Export-ModuleMember
入れ子になったモジュールによってエクスポートされるか、エクスポート プロパティのいずれかに一覧表示される必要があります。
- FunctionsToExport
- CmdletsToExport
- VariablesToExport
- AliasesToExport
モジュール セッション状態の入れ子になったモジュールはルート モジュールで使用できますが、呼び出し元のセッション状態のコマンドからは Get-Module
返されません。
この設定に記載されているスクリプト (.ps1
) は、呼び出し元のセッション状態ではなく、モジュールのセッション状態で実行されます。 呼び出し元のセッション状態でスクリプトを実行するには、 ScriptsToProcess 設定でスクリプト ファイル名を一覧表示します。
たとえば、このマニフェストをインポートすると、 Helpers.psm1
モジュールはルート モジュールのセッション状態に読み込まれます。 入れ子になったモジュールで宣言されたコマンドレットは、特に制限されていない限りエクスポートされます。
@{
NestedModules = @(
'Helpers\Helpers.psm1'
)
}
FunctionsToExport
この設定では、モジュールがエクスポートする関数を指定します。 この設定を使用すると、モジュールによってエクスポートされる関数を制限できます。 エクスポートされた関数の一覧から関数を削除できますが、関数をリストに追加することはできません。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | Yes |
この設定では、ワイルドカードを使用してエントリを指定できます。 エクスポートされた関数の一覧内のすべての一致する関数がエクスポートされます。
ヒント
パフォーマンスと検出を容易にするために、ワイルドカードを使用せずに、この設定でモジュールでエクスポートする関数を常に明示的に一覧表示する必要があります。
たとえば、 設定がコメントアウトされたモジュールをインポートすると、ルート モジュール内のすべての関数と入れ子になったモジュールがエクスポートされます。
@{
# FunctionsToExport = @()
}
このマニフェストは、設定をまったく指定しないのと機能的に同じです。
@{
FunctionsToExport = '*'
}
FunctionsToExport を空の配列として設定すると、このモジュールをインポートするときに、ルート モジュールまたは入れ子になったモジュールのエクスポートを使用できる関数はありません。
@{
FunctionsToExport = @()
}
注意
コマンドを使用してモジュール マニフェスト New-ModuleManifest
を作成し、 FunctionsToExport パラメーターを指定しない場合、作成されたマニフェストでは、この設定が空の配列として指定されます。 マニフェストを編集しない限り、モジュールの関数はエクスポートされません。
FunctionsToExport を関数のみを含むようにGet-Example
設定すると、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の関数がエクスポートされた場合でも、関数のみがGet-Example
使用できるようになります。
@{
FunctionsToExport = @(
'Get-Example'
)
}
FunctionsToExport をワイルドカード文字列で設定した場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の関数がモジュール メンバーとしてエクスポートされた場合でも、名前が でExample
終わる関数が使用できるようになります。
@{
FunctionsToExport = @(
'*Example'
)
}
CmdletsToExport
この設定では、モジュールがエクスポートするコマンドレットを指定します。 この設定を使用して、モジュールによってエクスポートされるコマンドレットを制限できます。 エクスポートされたモジュール メンバーの一覧からコマンドレットを削除できますが、コマンドレットを一覧に追加することはできません。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | Yes |
この設定では、ワイルドカードを使用してエントリを指定できます。 エクスポートされたコマンドレットの一覧で一致するすべてのコマンドレットがエクスポートされます。
ヒント
パフォーマンスと検出を容易にするために、ワイルドカードを使用せずに、この設定でモジュールでエクスポートするコマンドレットを常に明示的に一覧表示する必要があります。
たとえば、この設定がコメントアウトされたモジュールをインポートすると、ルート モジュール内のすべてのコマンドレットと入れ子になったモジュールがエクスポートされます。
@{
# CmdletsToExport = @()
}
このマニフェストは、設定をまったく指定しない場合と機能的に同じです。
@{
CmdletsToExport = '*'
}
CmdletsToExport を空の配列として設定すると、このモジュールをインポートするときに、ルート モジュールまたは入れ子になったモジュールのエクスポートを使用できるコマンドレットはありません。
@{
CmdletsToExport = @()
}
注意
コマンドを使用 New-ModuleManifest
してモジュール マニフェストを作成し、 CmdletsToExport パラメーターを指定しない場合、作成されたマニフェストでは、この設定が空の配列として指定されます。 マニフェストを編集しない限り、モジュールのコマンドレットはエクスポートされません。
CmdletsToExport が コマンドレットのみを含むようにGet-Example
設定されている場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他のコマンドレットがエクスポートされた場合でも、コマンドレットのみがGet-Example
使用可能になります。
@{
CmdletsToExport = @(
'Get-Example'
)
}
CmdletsToExport をワイルドカード文字列で設定した場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他のコマンドレットがモジュール メンバーとしてエクスポートされた場合でも、名前が でExample
終わるコマンドレットが使用可能になります。
@{
CmdletsToExport = @(
'*Example'
)
}
VariablesToExport
この設定では、モジュールがエクスポートする変数を指定します。 この設定を使用して、モジュールによってエクスポートされる変数を制限できます。 エクスポートされたモジュール メンバーの一覧から変数を削除できますが、リストに変数を追加することはできません。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | Yes |
この設定では、ワイルドカードを使用してエントリを指定できます。 エクスポートされたモジュール メンバーの一覧で一致するすべての変数がエクスポートされます。
ヒント
パフォーマンスと検出を容易にするために、ワイルドカードを使用せずに、この設定でモジュールでエクスポートする変数を常に明示的に一覧表示する必要があります。
たとえば、この設定がコメントアウトされたモジュールをインポートすると、ルート モジュール内のすべての変数と入れ子になったモジュールがエクスポートされます。
@{
# VariablesToExport = @()
}
このマニフェストは、設定をまったく指定しない場合と機能的に同じです。
@{
VariablesToExport = '*'
}
注意
コマンドを使用 New-ModuleManifest
してモジュール マニフェストを作成し、 VariablesToExport パラメーターを指定しない場合、作成されたマニフェストでは、この設定が として '*'
指定されます。 マニフェストを編集しない限り、モジュールのすべての変数がエクスポートされます。
VariablesToExport を空の配列として設定すると、このモジュールをインポートするときに、ルート モジュールまたは入れ子になったモジュールのエクスポートを使用できる変数はありません。
@{
VariablesToExport = @()
}
VariablesToExport が変数のみを含むようにSomeExample
設定されている場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の変数がエクスポートされた場合でも、変数のみが$SomeExample
使用可能になります。
@{
VariablesToExport = @(
'SomeExample'
)
}
VariablesToExport をワイルドカード文字列で設定した場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の変数がモジュール メンバーとしてエクスポートされた場合でも、名前が でExample
終わる変数が使用可能になります。
@{
VariablesToExport = @(
'*Example'
)
}
DscResourcesToExport
この設定では、モジュールがエクスポートする DSC リソースを指定します。 この設定を使用して、モジュールによってエクスポートされるクラスベースの DSC リソースを制限できます。 エクスポートされたモジュール メンバーの一覧から DSC リソースを削除できますが、DSC リソースを一覧に追加することはできません。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | Yes |
この設定では、ワイルドカードを使用してエントリを指定できます。 モジュール内の一致するすべてのクラスベースの DSC リソースがエクスポートされます。
ヒント
検出可能な場合は、モジュールがエクスポートするすべての DSC リソースを常に明示的に一覧表示する必要があります。
DSC リソースの作成と使用の詳細については、DSC の ドキュメントを参照してください。
このマニフェストは、ルート モジュールおよび入れ子になったモジュールで定義されているすべてのクラスベースおよび MOF ベースの DSC リソースをエクスポートします。
@{
# DscResourcesToExport = @()
}
このマニフェストは、ルート モジュールと入れ子になったモジュールで定義されているすべての MOF ベースの DSC リソースをエクスポートしますが、クラスベースの DSC リソースは 1 つだけです ExampleClassResource
。
@{
DscResourcesToExport = @(
'ExampleClassResource'
)
}
このマニフェストは、含まれるすべての DSC リソースをエクスポートします。 MOF-Based リソースが一覧に含まれていない場合でも、モジュールはそれをエクスポートします。
@{
DscResourcesToExport = @(
'ExampleClassResource'
'ExampleMofResourceFirst'
)
}
ModuleList
この設定は、このモジュールに含まれるモジュールの情報インベントリ リストです。 この一覧は、モジュールの動作には影響しません。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] , System.Collections.Hashtable[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定のエントリには、モジュール名、完全なモジュール仕様、またはモジュールまたはスクリプト ファイルへのパスを指定できます。
値がパスの場合、パスは完全修飾または相対パスにすることができます。
値がモジュール名または仕様の場合、PowerShell は PSModulePath で指定されたモジュールを検索します。
モジュール仕様は、次のキーを持つハッシュ テーブルです。
ModuleName
- 必須。 モジュール名を指定します。GUID
- 省略可能。 モジュールの GUID を指定します。- また、以下の 3 つのキーのうち少なくとも 1 つを指定する 必要 もあります。 キーは
RequiredVersion
、 キーまたはMaximumVersion
キーではModuleVersion
使用できません。 とMaximumVersion
キーを一緒に指定することで、モジュールの許容可能なバージョン範囲をModuleVersion
定義できます。ModuleVersion
- モジュールの最小許容バージョンを指定します。RequiredVersion
- モジュールの正確で必要なバージョンを指定します。MaximumVersion
- モジュールの許容される最大バージョンを指定します。
注意
RequiredVersion
は、Windows PowerShell 5.0 で追加されました。
MaximumVersion
は、Windows PowerShell 5.1 で追加されました。
このマニフェストでは、含まれているモジュールの情報リストは提供されません。 モジュールがある場合とない場合があります。 この設定が指定されていない場合でも、 RootModule、 ScriptsToProcess、または NestedModules の設定に一覧表示されているモジュールは、引き続き正常に動作します。
@{
# ModuleList = @()
}
このマニフェストは、それに含まれるモジュールが Example.psm1
と サブモジュールFirst.psm1
Second.psm1
と フォルダー内Submodules
にあることを宣言します。
@{
ModuleList = @(
'Example.psm1'
'Submodules\First.psm1'
'Submodules\Second.psm1'
)
}
ファイルリスト
この設定は、このモジュールに含まれるファイルの情報インベントリ リストです。 この一覧は、モジュールの動作には影響しません。
値 | |
---|---|
[Input Type](入力の種類) | System.String[] |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | Yes |
この設定のエントリは、モジュール マニフェストを含むフォルダーのファイルへの相対パスにする必要があります。
この設定が定義されたマニフェストに対してユーザーがを呼び出 Get-Module
すと、 FileList プロパティにはこれらのファイルへの完全なパスが含まれます。モジュールのパスと各エントリの相対パスが結合されます。
このマニフェストには、そのファイルの一覧は含まれません。
@{
# FileList = @()
}
このマニフェストは、この設定に含まれるファイルのみが一覧表示されることを宣言します。
@{
FileList = @(
'Example.psd1'
'Example.psm1'
'Assemblies\Example.dll'
'Scripts\Initialize.ps1'
'Submodules\First.psm1'
'Submodules\Second.psm1'
)
}
PrivateData
この設定では、ルート モジュールのスコープ内の任意のコマンドまたは関数で使用できるデータのハッシュ テーブルを定義します。
値 | |
---|---|
[Input Type](入力の種類) | System.Collections.Hashtable |
必須 | PowerShell ギャラリー、クレッシェンド |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
Crescendo マニフェストをエクスポートして新しいモジュールを作成すると、 Export-CrescendoModule
PrivateData に 2 つのキーが追加されます
- CrescendoGenerated - モジュールがエクスポートされたときのタイムスタンプ
- CrescendoVersion - モジュールのエクスポートに使用される Crescendo のバージョン
追跡するメタデータを保持する独自のキーを追加できます。この設定に追加されたキーは、 を使用して $MyInvocation.MyCommand.Module.PrivateData
ルート モジュールの関数とコマンドレットで使用できます。 ハッシュ テーブルは、モジュール スコープ自体では使用できません。モジュールで定義したコマンドレットでのみ使用できます。
たとえば、このマニフェストは PrivateData で PublishedDate キーを定義します。
@{
PrivateData = @{
PublishedDate = '2022-06-01'
}
}
モジュール内のコマンドレットは、 変数を使用してこの値に $MyInvocation
アクセスできます。
Function Get-Stale {
[CmdletBinding()]
param()
$PublishedDate = $MyInvocation.MyCommand.Module.PrivateData.PublishedDate
$CurrentDate = Get-Date
try {
$PublishedDate = Get-Date -Date $PublishedDate -ErrorAction Stop
} catch {
# The date was set in the manifest, set to an invalid value, or
# the script module was directly imported without the manifest.
Throw "Unable to determine published date. Check the module manifest."
}
if ($CurrentDate -gt $PublishedDate.AddDays(30)) {
Write-Warning "This module version was published more than 30 days ago."
} else {
$TimeUntilStale = $PublishedDate.AddDays(30) - $CurrentDate
"This module will be stale in $($TimeUntilStale.Days) days"
}
}
モジュールがインポートされると、関数は PrivateData の値を使用して、モジュールが発行されたタイミングを判断します。
Get-Stale -TestDate '2022-06-15'
Get-Stale -TestDate '2022-08-01'
This module will be stale in 16 days
WARNING: This module version was published more than 30 days ago.
PrivateData.PSData
PSData 子プロパティは、特定の拡張シナリオをサポートする値のハッシュ テーブルを定義します。
値 | |
---|---|
[Input Type](入力の種類) | System.Collections.Hashtable |
必須 | PowerShell ギャラリー、試験的機能、Crescendo モジュール |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
PSData 子プロパティは、次のシナリオで使用されます。
- PowerShell ギャラリー - コマンドレットを使用して
New-ModuleManifest
モジュール マニフェストを作成すると、モジュールを PowerShell ギャラリーに発行するときに必要なプレース ホルダー キーを含む PSData ハッシュテーブルが事前に設定されます。 モジュール マニフェストとPowerShell ギャラリーへの発行の詳細については、「PowerShell ギャラリー UI に影響を与えるパッケージ マニフェスト値」を参照してください。 - 試験的な機能 - 試験的な機能に関するメタデータは、PSData の ExperimentalFeatures プロパティに保持されます。 ExperimentalFeatures プロパティは、機能の名前と説明を含むハッシュテーブルの配列です。 詳細については、「 モジュールでの実験機能の宣言」を参照してください。
- Crescendo モジュール - Crescendo マニフェストをエクスポートして新しいモジュールを作成する場合は、
Export-CrescendoModule
PSData.Tags プロパティに値CrescendoBuilt
を追加します。 このタグを使用すると、Crescendo を使用して作成されたPowerShell ギャラリー内のモジュールを検索できます。 詳細については、「 Export-CrescendoModule」を参照してください。
HelpInfoURI
この設定では、モジュールの HelpInfo XML ファイルのインターネット アドレスを指定します。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
この設定の値は、http または https で始まる Uniform Resource Identifier (URI) である必要があります。
HelpInfo XML ファイルは、PowerShell 3.0 で導入された更新可能なヘルプ機能をサポートしています。 これには、モジュールのダウンロード可能なヘルプ ファイルの場所、およびサポートされている各ロケールの最新のヘルプ ファイルのバージョン番号に関する情報が含まれます。
更新可能なヘルプの詳細については、「 about_Updatable_Help」を参照してください。 HelpInfo XML ファイルの詳細については、「 更新可能なヘルプのサポート」を参照してください。
たとえば、このモジュールでは更新可能なヘルプがサポートされています。
@{
HelpInfoUri = 'http://https://go.microsoft.com/fwlink/?LinkID=603'
}
DefaultCommandPrefix
この設定では、セッションにインポートされるときにモジュール内のすべてのコマンドの名詞の前にプレフィックスを指定します。 プレフィックスは、ユーザーのセッションでコマンド名の競合を防ぐのに役立ちます。
値 | |
---|---|
[Input Type](入力の種類) | System.String |
必須 | いいえ |
未設定の場合の値 | $null |
ワイルドカードを受け入れます | いいえ |
モジュール ユーザーは、 コマンドレットの Prefix パラメーターを指定することで、この プレフィックス を Import-Module
オーバーライドできます。
この設定は PowerShell 3.0 で導入されました。
このマニフェストをインポートすると、このモジュールからインポートされたすべてのコマンドレットが Example
、名前の名詞の前に付加されます。 たとえば、 Get-Item
は として Get-ExampleItem
インポートされます。
@{
DefaultCommandPrefix = 'Example'
}