Jak vyvolat rutinu z jiné rutiny
Tento příklad ukazuje, jak vyvolat rutinu z jiné rutiny, která umožňuje přidat funkce vyvolané rutiny do rutiny, kterou vyvíjíte. V tomto příkladu se vyvolá rutina pro získání procesů Get-Process
spuštěných v místním počítači. Volání rutiny je Get-Process
ekvivalentní následujícímu příkazu. Tento příkaz načte všechny procesy, jejichž názvy začínají znaky "a" až "t".
Get-Process -name [a-t]
Důležité
Můžete vyvolat pouze ty rutiny, které jsou odvozeny přímo z třídy System.Management.Automation.Cmdlet. Nelze vyvolat rutinu odvozenou z třídy System.Management.Automation.PSCmdlet.
Vyvolání rutiny z rutiny
Ujistěte se, že je odkazováno na sestavení, které definuje rutinu, která se má vyvolat, a že je přidán
using
odpovídající příkaz . V tomto příkladu jsou přidány následující obory názvů.using System.Diagnostics; using System.Management.Automation; // Windows PowerShell assembly. using Microsoft.PowerShell.Commands; // Windows PowerShell assembly.
V metodě zpracování vstupu rutiny vytvořte novou instanci rutiny, která se má vyvolat. V tomto příkladu je vytvořen objekt typu Microsoft.PowerShell.Commands.Getprocesscommand společně s řetězcem, který obsahuje argumenty, které se používají při vyvolání rutiny.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };
Voláním metody System.Management.Automation.Cmdlet.Invoke* vyvoláte
Get-Process
rutinu .foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Příklad
V tomto příkladu Get-Process
je rutina vyvolána v rámci metody System.Management.Automation.Cmdlet.BeginProcessing rutiny.
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 + "!");
}
}
}
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro