Aufrufen eines Cmdlet in einem Cmdlet

In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet aus einem anderen Cmdlet aufrufen, wodurch Sie die Funktionalität des aufgerufenen Cmdlets dem Cmdlet hinzufügen können, das Sie entwickeln. In diesem Beispiel wird das Cmdlet aufgerufen, um die Prozesse zu Get-Process erhalten, die auf dem lokalen Computer ausgeführt werden. Der Aufruf des Get-Process Cmdlets entspricht dem folgenden Befehl. Dieser Befehl ruft alle Prozesse ab, deren Namen mit den Zeichen "a" bis "t" beginnen.

Get-Process -name [a-t]

Wichtig

Sie können nur die Cmdlets aufrufen, die direkt von der System.Management.Automation.Cmdlet-Klasse ableiten. Sie können kein Cmdlet aufrufen, das von der System.Management.Automation.PSCmdlet-Klasse ableitung.

So rufen Sie ein Cmdlet innerhalb eines Cmdlets auf

  1. Stellen Sie sicher, dass auf die Assembly verwiesen wird, die das aufrufende Cmdlet definiert, und dass die entsprechende using Anweisung hinzugefügt wird. In diesem Beispiel werden die folgenden Namespaces hinzugefügt.

    using System.Diagnostics;
    using System.Management.Automation;   // Windows PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // Windows PowerShell assembly.
    
  2. Erstellen Sie in der Eingabeverarbeitungsmethode des Cmdlets eine neue Instanz des Cmdlets, das aufgerufen werden soll. In diesem Beispiel wird ein Objekt vom Typ Microsoft.PowerShell.Commands.Getprocesscommand zusammen mit der Zeichenfolge erstellt, die die Argumente enthält, die beim Aufrufen des Cmdlets verwendet werden.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Rufen Sie die System.Management.Automation.Cmdlet.Invoke*-Methode auf, um das Cmdlet Get-Process auf aufruft.

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

Beispiel

In diesem Beispiel wird das Cmdlet innerhalb der Get-Process System.Management.Automation.Cmdlet.BeginProcessing-Methode eines Cmdlets aufgerufen.

using System;
using System.Diagnostics;
using System.Management.Automation;   // Windows PowerShell assembly.
using Microsoft.PowerShell.Commands;  // Windows PowerShell assembly.

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 { return name; }
      set { name = value; }
    }
    private string name;

    // 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>())
      {
        Console.WriteLine(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 + "!");
    }
  }
}

Weitere Informationen

Schreiben eines Windows PowerShell-Cmdlets