次の方法で共有


PowerShell モジュールの作成に関する考慮事項

このドキュメントには、最適なパフォーマンスを得るためにモジュールを作成する方法に関連するいくつかのガイドラインが含まれています。

モジュール マニフェストの作成

次のガイドラインを使用しないモジュール マニフェストは、モジュールがセッションで使用されていない場合でも、一般的な PowerShell のパフォーマンスに大きな影響を与える可能性があります。

コマンド自動検出は、各モジュールを分析して、モジュールがエクスポートするコマンドを特定します。この分析にはコストがかかる可能性があります。 モジュール分析の結果はユーザーごとにキャッシュされますが、キャッシュは最初の実行時には使用できません。これはコンテナーの一般的なシナリオです。 モジュール分析中に、エクスポートされたコマンドをマニフェストから完全に決定できる場合は、モジュールのより高価な分析を回避できます。

ガイドライン

  • モジュール マニフェストでは、AliasesToExportCmdletsToExport、および FunctionsToExport エントリでワイルドカードを使用しないでください。

  • モジュールが特定の型のコマンドをエクスポートしない場合は、@()を指定してマニフェストでこれを明示的に指定します。 不足しているエントリまたは $null エントリは、ワイルドカード *を指定することと同じです。

可能な場合は、以下を避ける必要があります。

@{
    FunctionsToExport = '*'

    # Also avoid omitting an entry, it's equivalent to using a wildcard
    # CmdletsToExport = '*'
    # AliasesToExport = '*'
}

代わりに以下を使用します。

@{
    FunctionsToExport = 'Format-Hex', 'Format-Octal'
    CmdletsToExport = @()  # Specify an empty array, not $null
    AliasesToExport = @()  # Also ensure all three entries are present
}

CDXML を回避する

モジュールの実装方法を決定する際には、主に次の 3 つの選択肢があります。

  • Binary (通常は C#)
  • スクリプト (PowerShell)
  • CDXML (CIM をラップする XML ファイル)

モジュールの読み込み速度が重要な場合、CDXML はバイナリ モジュールよりも約 1 桁遅くなります。

バイナリ モジュールは、事前にコンパイルされ、NGen を使用してマシンごとに 1 回 JIT コンパイルできるため、最も高速に読み込まれます。

PowerShell ではスクリプトをコンパイルして実行する前にスクリプトを解析する必要があるため、通常、スクリプト モジュールの読み込み速度はバイナリ モジュールよりも少し遅くなります。

CDXML モジュールは、最初に XML ファイルを解析し、次に解析およびコンパイルされる PowerShell スクリプトをかなり生成する必要があるため、通常、スクリプト モジュールよりもはるかに低速です。