Anropa en cmdlet inifrån en cmdlet

Det här exemplet visar hur du anropar en cmdlet inifrån en annan cmdlet, vilket gör att du kan lägga till funktionerna i den anropade cmdleten till den cmdlet som du utvecklar. I det här exemplet Get-Process anropas cmdleten för att hämta de processer som körs på den lokala datorn. Anropet till Get-Process cmdleten motsvarar följande kommando. Det här kommandot hämtar alla processer vars namn börjar med tecknen "a" via "t".

Get-Process -name [a-t]

Viktigt

Du kan bara anropa de cmdlets som härleds direkt från klassen System.Management.Automation.Cmdlet. Du kan inte anropa en cmdlet som härleds från klassen System.Management.Automation.PSCmdlet.

Anropa en cmdlet inifrån en cmdlet

  1. Se till att sammansättningen som definierar cmdleten som ska anropas refereras och att lämplig using instruktion läggs till. I det här exemplet läggs följande namnrymder till.

    using System.Diagnostics;
    using System.Management.Automation;   // Windows PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // Windows PowerShell assembly.
    
  2. I metoden för bearbetning av indata för cmdleten skapar du en ny instans av cmdleten som ska anropas. I det här exemplet skapas ett objekt av typen Microsoft.PowerShell.Commands.Getprocesscommand tillsammans med strängen som innehåller de argument som används när cmdleten anropas.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Anropa metoden System.Management.Automation.Cmdlet.Invoke* för att anropa Get-Process cmdleten.

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

Exempel

I det här exemplet Get-Process anropas cmdleten från metoden System.Management.Automation.Cmdlet.BeginProcessing för en cmdlet.

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 + "!");
    }
  }
}

Se även

Skriva en Windows PowerShell-cmdlet