Sdílet prostřednictvím


Jak vyvolat rutinu z rutiny

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

  1. 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.
    
  2. 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]*" };
    
  3. Volání metody System.Management.Automation.Cmdlet.Invoke* vyvolá Get-Process rutinu.

      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 + "!");
    }
  }
}

Viz také

psaní rutiny Prostředí Windows PowerShell