次の方法で共有


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 = ''
        # ExternalModuleDependencies = @()
    } # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfoURI = ''
# DefaultCommandPrefix = ''
}

モジュールを発行する前に、Test-ModuleManifest を使用してモジュール マニフェストを検証できます。 Test-ModuleManifest は、マニフェストが無効な場合、またはセッションがマニフェストに設定されている要件を満たしていないために、モジュールを現在のセッションにインポートできない場合にエラーを返します。

モジュール マニフェストでのスクリプト コードの使用

マニフェスト ファイル内の設定に割り当てられる値は、PowerShell によって評価される式にすることができます。 これにより、パスを構築し、変数に基づいて値を条件付きで割り当てることができます。

Import-Moduleを使用してモジュールをインポートすると、マニフェストは Restricted 言語モードで評価されます。 Restricted モードでは、使用できるコマンドと変数が制限されます。

許可されるコマンド

  • 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

この設定では、モジュールのプライマリ ファイルまたはルート ファイルを指定します。 モジュールがインポートされると、ルート モジュール ファイルによってエクスポートされたメンバーが呼び出し元のセッション状態にインポートされます。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

値は、次のいずれかのパスである必要があります。

  • スクリプト (.ps1)
  • スクリプト モジュール (.psm1)
  • モジュール マニフェスト (.psd1)
  • アセンブリ (.dll)
  • コマンドレット定義 XML ファイル (.cdxml)
  • Windows PowerShell 5.1 ワークフロー (.xaml)

パスは、モジュール マニフェストに対する相対パスである必要があります。

RootModule キーで指定されたルート ファイルがないモジュール マニフェストがある場合、マニフェストはモジュールのプライマリ ファイルになり、モジュールはマニフェスト モジュール (ModuleType = Manifest) になります。 RootModule が定義されている場合、モジュールの型は、使用されるファイル拡張子から決定されます。

  • .ps1 または .psm1 ファイルを使用すると、モジュールの種類 スクリプト
  • .psd1 ファイルを使用すると、モジュールの種類 マニフェスト
  • .dll ファイルは、モジュールの種類をバイナリ します
  • .cdxml ファイルを使用すると、モジュールの種類 CIM
  • .xaml ファイルを使用すると、モジュールの種類 ワークフロー

既定では、RootModule 内のすべてのモジュール メンバーがエクスポートされます。

先端

モジュールの読み込み速度は、バイナリスクリプト、および CIM モジュールの種類 異なります。 詳細については、「PowerShell モジュールの作成に関する考慮事項」 を参照してください。

たとえば、このモジュールの ModuleType はマニフェスト です。 このモジュールがエクスポートできるモジュール メンバーは、NestedModules 設定で指定されたモジュールで定義されているメンバーだけです。

@{
    RootModule = ''
}

手記

この設定は、ModuleToProcess としてモジュール マニフェスト指定することもできます。 この設定の名前は有効ですが、代わりに rootModule 使用することをお勧めします。

ModuleVersion

この設定では、モジュールのバージョンを指定します。 1 つのシステムに複数のバージョンのモジュールが存在する場合、Import-Moduleを実行すると、既定で最新バージョンが読み込まれます。

価値
入力の種類の System.String
必須 はい
の設定を解除した場合の値の 何一つ
ワイルドカード を受け入れます いいえ

この設定の値は、System.Versionを実行するときに Import-Module に変換できる必要があります。

たとえば、このマニフェストはモジュールのバージョンを '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 を指定します。

価値
入力の種類の System.String[]
受け入れ可能な値 する DesktopCore
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定の値が $nullの場合、セッションの PSEdition に関係なく、モジュールをインポートできます。 この値は、1 つ以上の受け入れ可能な値に設定できます。

PSEdition の詳細については、以下を参照してください。

この設定が定義されている場合、モジュールは、$PSEdition 自動変数の値が設定に含まれるセッションにのみインポートできます。

手記

$PSEdition 自動変数はバージョン 5.1 で導入されたため、以前のバージョンの Windows PowerShell では、CompatiblePSEditions 設定を使用するモジュールを読み込めませんでした。

たとえば、任意のセッションでこのモジュール マニフェストをインポートできます。

@{
    # CompatiblePSEditions = @()
}

この設定を指定すると、このモジュールは、$PSEdition 自動変数の値が Coreされているセッションでのみインポートできます。

@{
    CompatiblePSEditions = @('Core')
}

GUID

この設定では、モジュールの一意識別子を指定します。 GUID は、同じ名前のモジュールを区別するために使用されます。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の 00000000-0000-0000-0000-000000000000
ワイルドカード を受け入れます いいえ

この設定の値は、System.Guidを実行するときに Import-Module に変換できる必要があります。

注意

必須の設定ではありませんが、マニフェストで 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'
}

著者

この設定は、モジュールの作成者を識別します。

価値
入力の種類の System.String
必須 PowerShell ギャラリー
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

このマニフェストは、モジュールの作成者が Contoso 開発者エクスペリエンス チームであることを宣言します。

@{
    Author = 'Contoso Developer Experience Team'
}

CompanyName

この設定は、モジュールを作成した会社またはベンダーを識別します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

このマニフェストは、モジュールが Contoso, Ltd によって作成されたことを宣言します。

@{
    CompanyName = 'Contoso, Ltd.'
}

この設定では、モジュールの著作権に関する声明を指定します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

このマニフェストは、2022 年の時点で Contoso, Ltd. に対するすべての権利を予約する著作権に関する声明を宣言します。

@{
    Copyright = '(c) 2022 Contoso, Ltd. All rights reserved.'
}

形容

この設定では、モジュールについて大まかに説明します。

価値
入力の種類の System.String
必須 PowerShell ギャラリー
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

このマニフェストには、簡単な説明が含まれています。 here 文字列を使用して、より長い説明または複数行の説明を記述することもできます。

@{
    Description = 'Example commands to show a valid module manifest'
}

PowerShellVersion

この設定では、このモジュールで必要な PowerShell の最小バージョンを指定します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定の値は、System.Versionを実行するときに Import-Module に変換できる必要があります。

この設定が設定されていない場合、PowerShell は現在のバージョンに基づいてモジュールのインポートを制限しません。

たとえば、このマニフェストは、モジュールが PowerShell および Windows PowerShell のすべてのバージョンと互換性があることを宣言します。

@{
    # PowerShellVersion = ''
}

PowerShellVersion7.2に設定されている場合、PowerShell 7.2 以降でのみモジュールをインポートできます。

@{
    PowerShellVersion = '7.2'
}

PowerShellHostName

この設定では、モジュールに必要な PowerShell ホスト プログラムの名前 (Windows PowerShell ISE ホスト 、ConsoleHost など) を指定します。

価値
入力の種類の 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 = ''
}

PowerShellHostNameServerRemoteHostに設定されている場合、モジュールはリモート PowerShell セッションにのみインポートできます。

@{
    PowerShellHostName = 'ServerRemoteHost'
}

PowerShellHostVersion

この設定では、モジュールに必要な PowerShell ホスト プログラムの最小バージョンを指定します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定の値は、System.Versionを実行するときに Import-Module に変換できる必要があります。

注意

PowerShellHostName 設定なしでこの設定を使用できますが、予期しない動作の可能性が高くなります。 この設定は、PowerShellHostName 設定も使用している場合にのみ使用します。

たとえば、このマニフェストのモジュールは、ホストのバージョンに関係なく、ConsoleHostで実行されている任意の PowerShell セッションからインポートできます。

@{
    PowerShellHostName = 'ConsoleHost'
    # PowerShellHostVersion = ''
}

PowerShellHostVersion5.1に設定すると、ホストのバージョンが 5.1 以上である ConsoleHost で実行されている PowerShell セッションからのみモジュールをインポートできます。

@{
    PowerShellHostName    = 'ConsoleHost'
    PowerShellHostVersion = '5.1'
}

DotNetFrameworkVersion

この設定では、モジュールに必要な Microsoft .NET Framework の最小バージョンを指定します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

手記

この設定は、Windows PowerShell 5.1 などの PowerShell Desktop エディションでのみ有効であり、4.5 未満の .NET Framework バージョンにのみ適用されます。 この要件は、新しいバージョンの PowerShell または .NET Framework には影響しません。

この設定の値は、System.Versionを実行するときに Import-Module に変換できる必要があります。

たとえば、このマニフェストでは、Microsoft .NET Framework のバージョンに関係なく、そのモジュールを任意の PowerShell または Windows PowerShell セッションにインポートできることを宣言します。

@{
    # DotNetFrameworkVersion = ''
}

DotNetFrameworkVersion4.0に設定すると、Microsoft .NET Framework の利用可能な最新バージョンが 4.0 以上である Windows PowerShell の任意のセッションでこのモジュールをインポートできます。 任意の PowerShell セッションでインポートすることもできます。

@{
    DotNetFrameworkVersion = '4.0'
}

CLRVersion

この設定では、モジュールに必要な Microsoft .NET Framework の共通言語ランタイム (CLR) の最小バージョンを指定します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

手記

この設定は、Windows PowerShell 5.1 などの PowerShell Desktop エディションでのみ有効であり、4.5 未満の .NET Framework バージョンにのみ適用されます。 この要件は、新しいバージョンの PowerShell または .NET Framework には影響しません。

この設定の値は、System.Versionを実行するときに Import-Module に変換できる必要があります。

たとえば、このマニフェストでは、Microsoft .NET Framework の CLR バージョンのバージョンに関係なく、そのモジュールを任意の PowerShell または Windows PowerShell セッションにインポートできることを宣言します。

@{
    # CLRVersion = ''
}

CLRVersion4.0に設定すると、使用可能な最新バージョンの CLR が少なくとも 4.0 である Windows PowerShell の任意のセッションでこのモジュールをインポートできます。 任意の PowerShell セッションでインポートすることもできます。

@{
    CLRVersion = '4.0'
}

ProcessorArchitecture

この設定では、モジュールに必要なプロセッサ アーキテクチャを指定します。

価値
入力の種類の System.String
受け入れ可能な値 する NoneMSILX86IA64Amd64Arm
必須 いいえ
の設定を解除した場合の値の None
ワイルドカード を受け入れます いいえ

この設定の値は、System.Reflection.ProcessorArchitectureを実行するときに Import-Module に変換できる必要があります。

たとえば、このマニフェストは、システムのプロセッサ アーキテクチャに関係なく、任意のセッションでモジュールをインポートできることを宣言します。

@{
    # ProcessorArchitecture = ''
}

ProcessorArchitectureAmd64に設定されている場合、このモジュールは、一致するアーキテクチャを持つマシンで実行されているセッションにのみインポートできます。

@{
    ProcessorArchitecture = 'Amd64'
}

RequiredModules

この設定では、グローバル セッション状態である必要があるモジュールを指定します。 必要なモジュールがグローバル セッション状態でない場合は、PowerShell によってインポートされます。 必要なモジュールが使用できない場合、Import-Module コマンドは失敗します。

価値
入力の種類の System.String[]System.Collections.Hashtable[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定のエントリには、モジュール名、完全なモジュール仕様、またはモジュール ファイルへのパスを指定できます。

値がパスの場合、パスは完全修飾または相対パスにすることができます。

値が名前またはモジュールの指定である場合、PowerShell は指定されたモジュールの PSModulePath を検索します。

モジュール仕様は、次のキーを持つハッシュ テーブルです。

  • ModuleName - 必須。 モジュール名を指定します。
  • GUID - 省略可能な。 モジュールの GUID を指定します。
  • また、以下の 3 つのキーのうち少なくとも 1 つを指定する必要 RequiredVersion キーは、ModuleVersion キーまたは MaximumVersion キーでは使用できません。 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 キーの値で指定されたモジュール ファイルのインポートを行う前に、指定されたアセンブリを読み込みます。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定のエントリには、アセンブリのファイル名またはパスを指定できます。 必要なすべてのアセンブリが、NestedModules 設定でバイナリ モジュールとして一覧表示されている場合でも一覧表示します。

このマニフェストには、example.dll アセンブリが必要です。 このマニフェストで指定された書式ファイルまたは型ファイルを読み込む前に、PowerShell はモジュール マニフェストと同じディレクトリにある example.dll フォルダーから Assemblies を読み込みます。

@{
    RequiredAssemblies = @(
        'Assemblies\Example.dll'
    )
}

ScriptsToProcess

この設定では、モジュールのインポート時に呼び出し元のセッション状態で実行されるスクリプト (.ps1) ファイルを指定します。 ログイン スクリプトを使用する場合と同様に、これらのスクリプトを使用して環境を準備できます。

価値
入力の種類の 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) を指定します。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

モジュールをインポートすると、PowerShell は指定されたファイルを使用して Update-TypeData コマンドレットを実行します。 型ファイルはスコープ設定されていないため、セッション内のすべてのセッション状態に影響します。

タイプ ファイルの詳細については、about_Types.ps1xml を参照してください。

たとえば、このマニフェストをインポートすると、PowerShell はモジュール マニフェストと同じディレクトリにある Example.ps1xml フォルダーから、Types ファイルで指定された型を読み込みます。

@{
    TypesToProcess = @(
        'Types\Example.ps1xml'
    )
}

FormatsToProcess

この設定では、モジュールのインポート時に実行される書式設定ファイル (.ps1xml) を指定します。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

モジュールをインポートすると、PowerShell は指定されたファイルを使用して Update-FormatData コマンドレットを実行します。 フォーマット ファイルはスコープ設定されていないため、セッション内のすべてのセッション状態に影響します。

タイプ ファイルの詳細については、about_Format.ps1xml を参照してください。

たとえば、このモジュールをインポートすると、PowerShell はモジュール マニフェストと同じディレクトリにある Example.ps1xml フォルダーから、Formats ファイルに指定された形式を読み込みます。

@{
    FormatsToProcess = @(
        'Formats\Example.ps1xml'
    )
}

NestedModules

この設定では、モジュールのセッション状態にインポートされるスクリプト モジュール (.psm1) とバイナリ モジュール (.dll) を指定します。 スクリプト ファイル (.ps1) を指定することもできます。 この設定のファイルは、一覧表示されている順序で実行されます。

価値
入力の種類の System.String[]System.Collections.Hashtable[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定のエントリには、モジュール名、完全なモジュール仕様、またはモジュールまたはスクリプト ファイルへのパスを指定できます。

値がパスの場合、パスは完全修飾または相対パスにすることができます。

値がモジュール名または仕様の場合、PowerShell は指定されたモジュールの PSModulePath を検索します。

モジュール仕様は、次のキーを持つハッシュ テーブルです。

  • ModuleName - 必須。 モジュール名を指定します。
  • GUID - 省略可能な。 モジュールの GUID を指定します。
  • また、以下の 3 つのキーのうち少なくとも 1 つを指定する必要 RequiredVersion キーは、ModuleVersion キーまたは MaximumVersion キーでは使用できません。 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

この設定では、モジュールがエクスポートする関数を指定します。 この設定を使用して、モジュールによってエクスポートされる関数を制限できます。 エクスポートされた関数の一覧から関数を削除することはできますが、関数をリストに追加することはできません。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます はい

この設定では、ワイルドカードを使用してエントリを指定できます。 エクスポートされた関数の一覧で一致するすべての関数がエクスポートされます。

先端

パフォーマンスと検出可能性を高めるには、ワイルドカードを使用せずに、モジュールでこの設定でエクスポートする関数を常に明示的に一覧表示する必要があります。

たとえば、設定がコメント アウトされたモジュールをインポートすると、ルート モジュール内のすべての関数と入れ子になったモジュールがエクスポートされます。

@{
    # FunctionsToExport = @()
}

このマニフェストは、設定をまったく指定しないのと機能的に同じです。

@{
    FunctionsToExport = '*'
}

FunctionsToExport 空の配列として設定されている場合、このモジュールをインポートするときに、ルート モジュールまたは入れ子になったモジュールのエクスポートを使用できる関数はありません。

@{
    FunctionsToExport = @()
}

手記

New-ModuleManifest コマンドを使用してモジュール マニフェストを作成し、FunctionsToExport パラメーターを指定しない場合、作成されたマニフェストでは、この設定が空の配列として指定されます。 マニフェストを編集しない限り、モジュールの関数はエクスポートされません。

FunctionsToExportGet-Example 関数のみを含むように設定されている場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の関数がエクスポートされた場合でも、Get-Example 関数のみが使用できるようになります。

@{
    FunctionsToExport = @(
        'Get-Example'
    )
}

FunctionsToExport ワイルドカード文字列を使用して設定すると、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の関数がモジュール メンバーとしてエクスポートされた場合でも、Example で終わる名前の関数が使用可能になります。

@{
    FunctionsToExport = @(
        '*Example'
    )
}

CmdletsToExport

この設定では、モジュールがエクスポートするコマンドレットを指定します。 この設定を使用して、モジュールによってエクスポートされるコマンドレットを制限できます。 エクスポートされたモジュール メンバーの一覧からコマンドレットを削除できますが、一覧にコマンドレットを追加することはできません。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます はい

この設定では、ワイルドカードを使用してエントリを指定できます。 エクスポートされたコマンドレットの一覧で一致するすべてのコマンドレットがエクスポートされます。

先端

パフォーマンスと検出可能性を高めるには、ワイルドカードを使用せずに、モジュールでこの設定でエクスポートするコマンドレットを常に明示的に一覧表示する必要があります。

たとえば、この設定がコメント アウトされたモジュールをインポートすると、ルート モジュール内のすべてのコマンドレットと入れ子になったモジュールがエクスポートされます。

@{
    # CmdletsToExport = @()
}

このマニフェストは、設定をまったく指定しないのと機能的に同じです。

@{
    CmdletsToExport = '*'
}

CmdletsToExport 空の配列として設定されている場合、このモジュールをインポートするときに、ルート モジュールまたは入れ子になったモジュールのエクスポートを使用できるコマンドレットはありません。

@{
    CmdletsToExport = @()
}

手記

New-ModuleManifest コマンドを使用してモジュール マニフェストを作成し、CmdletsToExport パラメーターを指定しない場合、作成されたマニフェストでは、この設定が空の配列として指定されます。 マニフェストを編集しない限り、モジュールのコマンドレットはエクスポートされません。

CmdletsToExportGet-Example コマンドレットのみを含むように設定されている場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他のコマンドレットがエクスポートされた場合でも、Get-Example コマンドレットのみが使用可能になります。

@{
    CmdletsToExport = @(
        'Get-Example'
    )
}

CmdletsToExport ワイルドカード文字列を使用して設定すると、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他のコマンドレットがモジュール メンバーとしてエクスポートされた場合でも、名前が Example で終わるコマンドレットが使用可能になります。

@{
    CmdletsToExport = @(
        '*Example'
    )
}

VariablesToExport

この設定では、モジュールがエクスポートする変数を指定します。 この設定を使用して、モジュールによってエクスポートされる変数を制限できます。 エクスポートされたモジュール メンバーの一覧から変数を削除できますが、リストに変数を追加することはできません。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます はい

この設定では、ワイルドカードを使用してエントリを指定できます。 エクスポートされたモジュール メンバーのリスト内の一致するすべての変数がエクスポートされます。

先端

パフォーマンスと検出可能性を高めるには、ワイルドカードを使用せずに、モジュールでこの設定でエクスポートする変数を常に明示的に一覧表示する必要があります。

たとえば、この設定がコメント アウトされたモジュールをインポートすると、ルート モジュール内のすべての変数と入れ子になったモジュールがエクスポートされます。

@{
    # VariablesToExport = @()
}

このマニフェストは、設定をまったく指定しないのと機能的に同じです。

@{
    VariablesToExport = '*'
}

手記

New-ModuleManifest コマンドを使用してモジュール マニフェストを作成し、VariablesToExport パラメーターを指定しない場合、作成されたマニフェストにはこの設定が '*'として指定されます。 マニフェストを編集しない限り、モジュールのすべての変数がエクスポートされます。

VariablesToExport 空の配列として設定されている場合、このモジュールをインポートするときに、ルート モジュールまたは入れ子になったモジュールのエクスポートを使用できる変数はありません。

@{
    VariablesToExport = @()
}

VariablesToExportSomeExample 変数のみを含むように設定されている場合、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の変数がエクスポートされた場合でも、$SomeExample 変数のみが使用可能になります。

@{
    VariablesToExport = @(
        'SomeExample'
    )
}

variablesToExport ワイルドカード文字列で設定、このモジュールをインポートすると、ルート モジュールまたは入れ子になったモジュールによって他の変数がモジュール メンバーとしてエクスポートされた場合でも、Example で終わる名前の変数が使用可能になります。

@{
    VariablesToExport = @(
        '*Example'
    )
}

DscResourcesToExport

この設定では、モジュールがエクスポートする DSC リソースを指定します。 この設定を使用して、モジュールによってエクスポートされるクラスベースの DSC リソースを制限できます。 エクスポートされたモジュール メンバーの一覧から DSC リソースを削除できますが、DSC リソースを一覧に追加することはできません。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます はい

この設定では、ワイルドカードを使用してエントリを指定できます。 モジュール内の一致するすべてのクラス ベースの DSC リソースがエクスポートされます。

先端

検出可能な場合は、モジュールがエクスポートするすべての DSC リソースを常に明示的に一覧表示する必要があります。

DSC リソースの作成と使用の詳細については、DSC ドキュメントを参照してください。

このマニフェストは、ルート モジュールおよび入れ子になったモジュールで定義されているすべてのクラス ベースおよび MOF ベースの DSC リソースをエクスポートします。

@{
    # DscResourcesToExport = @()
}

このマニフェストは、ルート モジュールと入れ子になったモジュールで定義されているすべての MOF ベースの DSC リソースをエクスポートしますが、ExampleClassResourceクラス ベースの DSC リソースは 1 つだけです。

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
    )
}

このマニフェストは、それに含まれるすべての DSC リソースをエクスポートします。 MOF-Based リソースが一覧に含まれていない場合でも、モジュールはそれをエクスポートします。

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
        'ExampleMofResourceFirst'
    )
}

ModuleList

この設定は、このモジュールに含まれるモジュールの情報インベントリ リストです。 この一覧は、モジュールの動作には影響しません。

価値
入力の種類の System.String[]System.Collections.Hashtable[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定のエントリには、モジュール名、完全なモジュール仕様、またはモジュールまたはスクリプト ファイルへのパスを指定できます。

値がパスの場合、パスは完全修飾または相対パスにすることができます。

値がモジュール名または仕様の場合、PowerShell は指定されたモジュールの PSModulePath を検索します。

モジュール仕様は、次のキーを持つハッシュ テーブルです。

  • ModuleName - 必須。 モジュール名を指定します。
  • GUID - 省略可能な。 モジュールの GUID を指定します。
  • また、以下の 3 つのキーのうち少なくとも 1 つを指定する必要 RequiredVersion キーは、ModuleVersion キーまたは MaximumVersion キーでは使用できません。 ModuleVersion キーと MaximumVersion キーを一緒に指定することで、モジュールの許容可能なバージョン範囲を定義できます。
    • ModuleVersion - モジュールの最小許容バージョンを指定します。
    • RequiredVersion - モジュールの正確で必要なバージョンを指定します。
    • MaximumVersion - モジュールの許容される最大バージョンを指定します。

手記

RequiredVersion は、Windows PowerShell 5.0 で追加されました。 MaximumVersion は Windows PowerShell 5.1 で追加されました。

このマニフェストでは、含まれるモジュールの情報リストは提供されません。 モジュールが含まれる場合とない場合があります。 この設定が指定されていない場合でも、RootModuleScriptsToProcessNestedModules 設定に一覧表示されているモジュールは、引き続き正常に動作します。

@{
    # ModuleList = @()
}

このマニフェストは、含まれるモジュールが Example.psm1 だけであり、サブモジュールが First.psm1 フォルダーに Second.psm1 および Submodules されていることを宣言します。

@{
    ModuleList = @(
        'Example.psm1'
        'Submodules\First.psm1'
        'Submodules\Second.psm1'
    )
}

FileList

この設定は、このモジュールに含まれるファイルの情報インベントリ リストです。 この一覧は、モジュールの動作には影響しません。

価値
入力の種類の System.String[]
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます はい

この設定のエントリは、モジュール マニフェストを含むフォルダーのファイルへの相対パスである必要があります。

ユーザーがこの設定を定義したマニフェストに対して Get-Module を呼び出すと、FileList プロパティには、これらのファイルへの完全なパスが含まれます。モジュールのパスと各エントリの相対パスが結合されます。

このマニフェストには、そのファイルの一覧は含まれません。

@{
    # FileList = @()
}

このマニフェストは、この設定に含まれるファイルのみが一覧表示されることを宣言します。

@{
    FileList = @(
        'Example.psd1'
        'Example.psm1'
        'Assemblies\Example.dll'
        'Scripts\Initialize.ps1'
        'Submodules\First.psm1'
        'Submodules\Second.psm1'
    )
}

PrivateData

この設定では、ルート モジュールのスコープ内のコマンドまたは関数で使用できるデータのハッシュ テーブルを定義します。

価値
入力の種類の System.Collections.Hashtable
必須 PowerShell ギャラリー、Crescendo
の設定を解除した場合の値の $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 子プロパティは、特定の拡張シナリオをサポートする値のハッシュ テーブルを定義します。

価値
入力の種類の System.Collections.Hashtable
必須 PowerShell ギャラリー、試験的機能、Crescendo モジュール
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

PSData 子プロパティは、次のシナリオで使用されます。

  • PowerShell ギャラリー - New-ModuleManifest を使用してモジュール マニフェストを作成すると、コマンドレットは、モジュールを PowerShell ギャラリーに発行するときに必要なプレースホルダー キーを 含む PSData ハッシュテーブルを事前に設定します。 モジュール マニフェストと PowerShell ギャラリーへの発行の詳細については、「PowerShell ギャラリー UIに影響を与えるパッケージ マニフェスト値」を参照してください。
  • 試験的特徴 - 試験的特徴に関するメタデータは、PSData ExperimentalFeatures プロパティ保持されます。 ExperimentalFeatures プロパティは、機能の名前と説明を含むハッシュテーブルの配列です。 詳細については、「モジュールでの試験的特徴の宣言」を参照してください。
  • Crescendo モジュール - 新しいモジュールを作成するために Crescendo マニフェストをエクスポートすると、Export-CrescendoModuleCrescendoBuilt プロパティに 値が追加されます。 このタグを使用すると、Crescendo を使用して作成された PowerShell ギャラリー内のモジュールを検索できます。 詳細については、「 Export-CrescendoModuleを参照してください。
  • PSData.ExternalModuleDependencies プロパティは、このモジュールの依存関係であるモジュール名の配列です。 このプロパティは情報提供のみを行い、モジュールのインストールや読み込みには影響しません。

HelpInfoURI

この設定では、モジュールの HelpInfo XML ファイルのインターネット アドレスを指定します。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

この設定の値は、http または https で始まる URI (Uniform Resource Identifier) である必要があります。

HelpInfo XML ファイルは、PowerShell 3.0 で導入された更新可能なヘルプ機能をサポートしています。 モジュールのダウンロード可能なヘルプ ファイルの場所と、サポートされているロケールごとに最新のヘルプ ファイルのバージョン番号に関する情報が含まれています。

更新可能なヘルプについては、「about_Updatable_Help」を参照してください。 HelpInfo XML ファイルの詳細については、更新可能なヘルプ のサポートを参照してください。

たとえば、このモジュールでは更新可能なヘルプがサポートされています。

@{
    HelpInfoUri = 'http://https://go.microsoft.com/fwlink/?LinkID=603'
}

DefaultCommandPrefix

この設定では、セッションにインポートされるときにモジュール内のすべてのコマンドの名詞の前にプレフィックスを指定します。 プレフィックスは、ユーザーのセッションでのコマンド名の競合を防ぐのに役立ちます。

価値
入力の種類の System.String
必須 いいえ
の設定を解除した場合の値の $null
ワイルドカード を受け入れます いいえ

モジュール ユーザーは、 コマンドレットの Import-Module パラメーターを指定することで、このプレフィックスをオーバーライドできます。

この設定は、PowerShell 3.0 で導入されました。

このマニフェストをインポートすると、このモジュールからインポートされたすべてのコマンドレット Example 名前の名詞の前に付加されます。 たとえば、Get-ItemGet-ExampleItemとしてインポートされます。

@{
    DefaultCommandPrefix = 'Example'
}

こちらも参照ください