PowerShell バイナリ モジュールを記述する方法

バイナリ モジュールには、コマンドレット クラスを含む任意のアセンブリ (.dll) を指定できます。 既定では、バイナリ モジュールがインポートされると、アセンブリ内のすべてのコマンドレットがインポートされます。 ただし、ルート モジュールがアセンブリであるモジュール マニフェストを作成することで、インポートされるコマンドレットを制限できます。 (たとえば、マニフェストの CmdletsToExport キーを使用して、必要なコマンドレットのみをエクスポートできます)。さらに、バイナリ モジュールには、追加のファイル、ディレクトリ構造、および 1 つのコマンドレットでは使用できない便利な管理情報を含めることもできます。

次の手順では、PowerShell バイナリ モジュールを作成してインストールする方法について説明します。

PowerShell バイナリ モジュールを作成してインストールする方法

  1. 必要な機能を備え、バイナリ PowerShell ソリューション (C# で記述されたコマンドレットなど) を作成し、正しく実行されていることを確認します。

    コードの観点から見ると、バイナリ モジュールの中核は単なるコマンドレット アセンブリです。 実際、PowerShell は、読み込みとアンロードの観点から、1 つのコマンドレット アセンブリをモジュールとして扱います。開発者は追加の作業を行う必要はありません。 コマンドレットの記述の詳細については、「コマンドレットの作成」をWindows PowerShellしてください

  2. 必要に応じて、ソリューションの残りの部分 (追加のコマンドレット、XML ファイルなど) を作成し、モジュール マニフェストで記述します。

    モジュール マニフェストでは、ソリューション内のコマンドレット アセンブリの説明に加えて、モジュールをエクスポートおよびインポートする方法、公開されるコマンドレット、モジュールに追加のファイルを含む内容を記述できます。 ただし、前に説明したように、PowerShell では、追加の作業を行う必要がないモジュールのようにバイナリ コマンドレットを扱います。 そのため、モジュール マニフェストは、主に複数のファイルを 1 つのパッケージに結合したり、特定のアセンブリのパブリケーションを明示的に制御したりする場合に便利です。 詳細については 、「PowerShell モジュール マニフェストを記述する方法」を参照してください

    次のコードは、モジュールとして使用できる 3 つのコマンドレットを同じファイルに含む非常に単純な C# コード ブロックです。

    using System.Management.Automation;           // Windows PowerShell namespace.
    
    namespace ModuleCmdlets
    {
      [Cmdlet(VerbsDiagnostic.Test,"BinaryModuleCmdlet1")]
      public class TestBinaryModuleCmdlet1Command : Cmdlet
      {
        protected override void BeginProcessing()
        {
          WriteObject("BinaryModuleCmdlet1 exported by the ModuleCmdlets module.");
        }
      }
    
      [Cmdlet(VerbsDiagnostic.Test, "BinaryModuleCmdlet2")]
      public class TestBinaryModuleCmdlet2Command : Cmdlet
      {
          protected override void BeginProcessing()
          {
              WriteObject("BinaryModuleCmdlet2 exported by the ModuleCmdlets module.");
          }
      }
    
      [Cmdlet(VerbsDiagnostic.Test, "BinaryModuleCmdlet3")]
      public class TestBinaryModuleCmdlet3Command : Cmdlet
      {
          protected override void BeginProcessing()
          {
              WriteObject("BinaryModuleCmdlet3 exported by the ModuleCmdlets module.");
          }
      }
    
    }
    
  3. ソリューションをパッケージ化し、PowerShell モジュール パスのどこかにパッケージを保存します。

    グローバル PSModulePath 環境変数は、PowerShell がモジュールの検索に使用する既定のパスを記述します。 たとえば、システムにモジュールを保存する一般的なパスは です %SystemRoot%\users\<user>\Documents\WindowsPowerShell\Modules\<moduleName> 。 既定のパスを使用しない場合は、インストール時にモジュールの場所を明示的に指定する必要があります。 ソリューションに対して複数のアセンブリとファイルを格納するためにフォルダーが必要になる場合があります。モジュールを保存するフォルダーを必ず作成してください。

    技術的には、 のどこにもモジュールをインストールする必要はない点に注意してください。これらは、PowerShell がモジュールを探す既定の PSModulePath 場所に過言ではありません。 ただし、モジュールを他の場所に格納する理由がない限り、ベスト プラクティスと見なされます。 詳細については、「PowerShell モジュールのインストール」および「PowerShell モジュールのインストール」をabout_PSModulePath。

  4. Import-Module を呼び出して、モジュール を PowerShell にインポートします

    Import-Module を呼び出して、モジュールをアクティブなメモリに読み込む。 PowerShell 3.0 以降を使用している場合は、コードでモジュールの名前を呼び出すだけでインポートされます。詳細については 、「PowerShell モジュールのインポート」を参照してください

スナップイン アセンブリをモジュールとしてインポートする

スナップイン アセンブリに存在するコマンドレットとプロバイダーは、バイナリ モジュールとして読み込まれます。 スナップイン アセンブリがバイナリ モジュールとして読み込まれると、スナップイン内のコマンドレットとプロバイダーはユーザーが使用できますが、アセンブリ内のスナップイン クラスは無視され、スナップインは登録されません。 その結果、Windows PowerShell によって提供されるスナップイン コマンドレットは、コマンドレットとプロバイダーがセッションで使用できる場合でも、スナップインを検出できません。

また、スナップインによって参照される書式設定ファイルまたは型ファイルは、バイナリ モジュールの一部としてインポートできません。 書式設定ファイルと型ファイルをインポートするには、モジュール マニフェストを作成する必要があります。 「PowerShell モジュール マニフェストを記述する方法」を参照してください

参照

Windows PowerShell モジュールを記述する