次の方法で共有


コマンドレット内からコマンドレットを呼び出す方法

この例では、別のバイナリ コマンドレット内から直接 [System.Management.Automation.Cmdlet] から派生するバイナリ コマンドレットを呼び出す方法を示します。これにより、呼び出されたコマンドレットの機能を、開発中のバイナリ コマンドレットに追加できます。 この例では、Get-Process コマンドレットを呼び出して、ローカル コンピューターで実行されているプロセスを取得します。 Get-Process コマンドレットの呼び出しは、次のコマンドと同じです。 このコマンドは、名前が "a" から "t" までの文字で始まるすべてのプロセスを取得します。

Get-Process -Name [a-t]*

重要

System.Management.Automation.Cmdlet クラスから直接派生したコマンドレットのみを呼び出すことができます。 System.Management.Automation.PSCmdlet クラスから派生するコマンドレットを呼び出すことはできません。 例については、「PSCmdlet内から PSCmdlet を呼び出す方法」を参照してください。

コマンドレット内からコマンドレットを呼び出すには

  1. 呼び出すコマンドレットを定義するアセンブリが参照されていること、および適切な using ステートメントが追加されていることを確認します。 この例では、次の名前空間が追加されます。

    using System.Diagnostics;
    using System.Management.Automation;   // PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.
    
  2. コマンドレットの入力処理メソッドで、呼び出すコマンドレットの新しいインスタンスを作成します。 この例では、Microsoft.PowerShell.Commands.GetProcessCommand 型のオブジェクトが、コマンドレットの呼び出し時に使用される引数を含む文字列と共に作成されます。

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. System.Management.Automation.Cmdlet.Invoke* メソッドを呼び出して、Get-Process コマンドレットを呼び出します。

      foreach (Process p in gp.Invoke<Process>())
      {
        Console.WriteLine(p.ToString());
      }
    }
    

この例では、Get-Process コマンドレットは、コマンドレットの System.Management.Automation.Cmdlet.BeginProcessing メソッド内から呼び出されます。

using System;
using System.Diagnostics;
using System.Management.Automation;   // PowerShell assembly.
using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.

namespace SendGreeting
{
  // Declare the class as a cmdlet and specify an
  // appropriate verb and noun for the cmdlet name.
  [Cmdlet(VerbsCommunications.Send, "GreetingInvoke")]
  public class SendGreetingInvokeCommand : Cmdlet
  {
    // Declare the parameters for the cmdlet.
    [Parameter(Mandatory = true)]
    public string Name { get; set; }

    // Override the BeginProcessing method to invoke
    // the Get-Process cmdlet.
    protected override void BeginProcessing()
    {
      GetProcessCommand gp = new GetProcessCommand();
      gp.Name = new string[] { "[a-t]*" };
      foreach (Process p in gp.Invoke<Process>())
      {
        WriteVerbose(p.ToString());
      }
    }

    // Override the ProcessRecord method to process
    // the supplied user name and write out a
    // greeting to the user by calling the WriteObject
    // method.
    protected override void ProcessRecord()
    {
      WriteObject("Hello " + Name + "!");
    }
  }
}

こちらもご覧ください

Windows PowerShell コマンドレット の作成