Aufrufen eines Cmdlets aus einem Cmdlet
In diesem Beispiel wird gezeigt, wie Sie ein binäres Cmdlet aufrufen, das von [System.Management.Automation.Cmdlet]
direkt aus einem anderen binären Cmdlet abgeleitet wird. Dadurch können Sie dem entwickelnden Binär-Cmdlet die Funktionalität des aufgerufenen Cmdlets hinzufügen. In diesem Beispiel wird das Cmdlet Get-Process
aufgerufen, um die Prozesse abzurufen, die auf dem lokalen Computer ausgeführt werden. Der Aufruf des cmdlets Get-Process
entspricht dem folgenden Befehl. Mit diesem Befehl werden alle Prozesse abgerufen, deren Namen mit den Zeichen "a" durch "t" beginnen.
Get-Process -Name [a-t]*
Wichtig
Sie können nur die Cmdlets aufrufen, die direkt von der System.Management.Automation.Cmdlet Klasse abgeleitet sind. Sie können kein Cmdlet aufrufen, das von der System.Management.Automation.PSCmdlet Klasse abgeleitet ist. Ein Beispiel finden Sie unter Aufrufen eines PSCmdlet aus einem PSCmdlet-.
So rufen Sie ein Cmdlet aus einem Cmdlet auf
Stellen Sie sicher, dass auf die Assembly, die das zu aufrufende Cmdlet definiert, verwiesen wird 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; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.
Erstellen Sie in der Eingabeverarbeitungsmethode des Cmdlets eine neue Instanz des Cmdlets, die 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]*" };
Rufen Sie die System.Management.Automation.Cmdlet.Invoke* Methode auf, um das cmdlet
Get-Process
aufzurufen.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Beispiel
In diesem Beispiel wird das cmdlet Get-Process
innerhalb der System.Management.Automation.Cmdlet.BeginProcessing Methode eines Cmdlets aufgerufen.
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 + "!");
}
}
}