Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento příklad ukazuje, jak vyvolat binární rutinu odvozenou z [System.Management.Automation.Cmdlet] přímo z jiné binární rutiny, která umožňuje přidat funkce vyvolané rutiny do binární rutiny, kterou vyvíjíte. V tomto příkladu se vyvolá Get-Process rutina pro získání procesů spuštěných v místním počítači. Volání rutiny Get-Process odpovídá 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, která je odvozena z třídy System.Management.Automation.PSCmdlet. Příklad naleznete v tématu Jak vyvolat PSCmdlet z psCmdlet.
Vyvolání rutiny z rutiny
Ujistěte se, že na sestavení, které definuje vyvolánou rutinu, odkazuje a že se přidá příslušný příkaz
using. V tomto příkladu jsou přidány následující obory názvů.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.V metodě zpracování vstupu rutiny vytvořte novou instanci rutiny, která se má vyvolat. V tomto příkladu se vytvoří objekt typu Microsoft.PowerShell.Commands.GetProcessCommand společně s řetězcem, který obsahuje argumenty, které se použijí při vyvolání rutiny.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };Volání metody System.Management.Automation.Cmdlet.Invoke* vyvolá
Get-Processrutinu.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Příklad
V tomto příkladu se rutina Get-Process vyvolá z System.Management.Automation.Cmdlet.BeginProcessing metody rutiny.
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 + "!");
}
}
}