Dela via


Så här anropar du en cmdlet från en cmdlet

Det här exemplet visar hur du anropar en binär cmdlet som härleds från [System.Management.Automation.Cmdlet] direkt inifrån en annan binär cmdlet, vilket gör att du kan lägga till funktionen för den anropade cmdleten till den binära cmdlet som du utvecklar. I det här exemplet anropas cmdleten Get-Process för att hämta de processer som körs på den lokala datorn. Anropet till cmdleten Get-Process 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 cmdletar 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. Ett exempel finns i Så här anropar du en PSCmdlet inifrån en PSCmdlet-.

Så här anropar du en cmdlet inifrån en cmdlet

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

    using System.Diagnostics;
    using System.Management.Automation;   // PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.
    
  2. I cmdletens indatabearbetningsmetod 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 argumenten 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 cmdleten Get-Process.

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

Exempel

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

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

Se även

Skriva en Windows PowerShell-cmdlet