Een cmdlet aanroepen vanuit een cmdlet

In dit voorbeeld ziet u hoe u een cmdlet aanroept vanuit een andere cmdlet, waarmee u de functionaliteit van de aangeroepen cmdlet kunt toevoegen aan de cmdlet die u ontwikkelt. In dit voorbeeld wordt de cmdlet aangeroepen om de processen op te halen die op de Get-Process lokale computer worden uitgevoerd. De aanroep van Get-Process de cmdlet is gelijk aan de volgende opdracht. Met deze opdracht worden alle processen opgehaald waarvan de namen beginnen met de tekens 'a' tot en met 't'.

Get-Process -name [a-t]

Belangrijk

U kunt alleen de cmdlets aanroepen die rechtstreeks zijn afgeleid van de klasse System.Management.Automation.Cmdlet. U kunt geen cmdlet aanroepen die is afgeleid van de klasse System.Management.Automation.PSCmdlet.

Een cmdlet aanroepen vanuit een cmdlet

  1. Zorg ervoor dat wordt verwezen naar de assembly die de cmdlet definieert die moet worden aangeroepen en dat de juiste using instructie wordt toegevoegd. In dit voorbeeld worden de volgende naamruimten toegevoegd.

    using System.Diagnostics;
    using System.Management.Automation;   // Windows PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // Windows PowerShell assembly.
    
  2. Maak in de invoerverwerkingsmethode van de cmdlet een nieuwe instantie van de cmdlet die moet worden aangeroepen. In dit voorbeeld wordt een object van het type Microsoft.PowerShell.Commands.Getprocesscommand gemaakt, samen met de tekenreeks die de argumenten bevat die worden gebruikt wanneer de cmdlet wordt aangeroepen.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Roep de methode System.Management.Automation.Cmdlet.Invoke* aan om de Get-Process cmdlet aan te roepen.

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

Voorbeeld

In dit voorbeeld wordt de cmdlet aangeroepen vanuit de Get-Process methode System.Management.Automation.Cmdlet.BeginProcessing van een 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 + "!");
    }
  }
}

Zie ook

Een Windows PowerShell-cmdlet schrijven