Aufrufen eines Cmdlet in einem Cmdlet
In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet aus einem anderen Cmdlet aufrufen, wodurch Sie die Funktionalität des aufgerufenen Cmdlets dem Cmdlet hinzufügen können, das Sie entwickeln. In diesem Beispiel wird das Cmdlet aufgerufen, um die Prozesse zu Get-Process
erhalten, die auf dem lokalen Computer ausgeführt werden. Der Aufruf des Get-Process
Cmdlets entspricht dem folgenden Befehl. Dieser Befehl ruft alle Prozesse ab, deren Namen mit den Zeichen "a" bis "t" beginnen.
Get-Process -name [a-t]
Wichtig
Sie können nur die Cmdlets aufrufen, die direkt von der System.Management.Automation.Cmdlet-Klasse ableiten. Sie können kein Cmdlet aufrufen, das von der System.Management.Automation.PSCmdlet-Klasse ableitung.
So rufen Sie ein Cmdlet innerhalb eines Cmdlets auf
Stellen Sie sicher, dass auf die Assembly verwiesen wird, die das aufrufende Cmdlet definiert, 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; // Windows PowerShell assembly. using Microsoft.PowerShell.Commands; // Windows PowerShell assembly.
Erstellen Sie in der Eingabeverarbeitungsmethode des Cmdlets eine neue Instanz des Cmdlets, das 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
auf aufruft.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Beispiel
In diesem Beispiel wird das Cmdlet innerhalb der Get-Process
System.Management.Automation.Cmdlet.BeginProcessing-Methode eines Cmdlets aufgerufen.
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 + "!");
}
}
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für