Een cmdlet aanroepen vanuit een cmdlet
In dit voorbeeld ziet u hoe u een binaire cmdlet aanroept die is afgeleid van [System.Management.Automation.Cmdlet]
rechtstreeks vanuit een andere binaire cmdlet, waarmee u de functionaliteit van de aangeroepen cmdlet kunt toevoegen aan de binaire cmdlet die u ontwikkelt. In dit voorbeeld wordt de Get-Process
-cmdlet aangeroepen om de processen op te halen die op de lokale computer worden uitgevoerd. De aanroep van de Get-Process
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.PSCmd let. Zie voor een voorbeeld Een PSCmdlet aanroepen vanuit een PSCmdlet-.
Een cmdlet vanuit een cmdlet aanroepen
Zorg ervoor dat er wordt verwezen naar de assembly die de cmdlet definieert die moet worden aangeroepen en of de juiste
using
-instructie wordt toegevoegd. In dit voorbeeld worden de volgende naamruimten toegevoegd.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.
Maak in de invoerverwerkingsmethode van de cmdlet een nieuw exemplaar van de cmdlet dat 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]*" };
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 Get-Process
cmdlet aangeroepen vanuit de System.Management.Automation.Cmdlet.BeginProcessing methode van een 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 + "!");
}
}
}