Udostępnij za pomocą


Jak wywołać polecenie cmdlet z poziomu polecenia cmdlet

W tym przykładzie pokazano, jak wywołać binarne polecenie cmdlet pochodzące z [System.Management.Automation.Cmdlet] bezpośrednio z poziomu innego binarnego polecenia cmdlet, które umożliwia dodanie funkcji wywoływanego polecenia cmdlet do opracowywanego polecenia cmdlet binarnego. W tym przykładzie polecenie cmdlet Get-Process jest wywoływane w celu pobrania procesów uruchomionych na komputerze lokalnym. Wywołanie polecenia cmdlet Get-Process jest równoważne następującemu poleceniu. To polecenie pobiera wszystkie procesy, których nazwy zaczynają się od znaków "a" do "t".

Get-Process -Name [a-t]*

Ważne

Można wywołać tylko te polecenia cmdlet, które pochodzą bezpośrednio z klasy System.Management.Automation.Cmdlet. Nie można wywołać polecenia cmdlet pochodzącego z klasy System.Management.Automation.PSCmdlet. Aby zapoznać się z przykładem, zobacz How to invoke a PSCmdlet from within a PSCmdlet.

Aby wywołać polecenie cmdlet z poziomu polecenia cmdlet

  1. Upewnij się, że zestaw, który definiuje wywoływane polecenie cmdlet, jest przywoływany i że dodano odpowiednią instrukcję using. W tym przykładzie dodawane są następujące przestrzenie nazw.

    using System.Diagnostics;
    using System.Management.Automation;   // PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // PowerShell cmdlets assembly you want to call.
    
  2. W metodzie przetwarzania wejściowego polecenia cmdlet utwórz nowe wystąpienie polecenia cmdlet do wywołania. W tym przykładzie obiekt typu Microsoft.PowerShell.Commands.GetProcessCommand jest tworzony wraz z ciągiem zawierającym argumenty używane podczas wywoływanego polecenia cmdlet.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Wywołaj metodę System.Management.Automation.Cmdlet.Invoke*, aby wywołać polecenie cmdlet Get-Process.

      foreach (Process p in gp.Invoke<Process>())
      {
        Console.WriteLine(p.ToString());
      }
    }
    

Przykład

W tym przykładzie polecenie cmdlet Get-Process jest wywoływane z poziomu System.Management.Automation.Cmdlet.BeginProcessing metody polecenia cmdlet.

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

Zobacz też

pisanie polecenia cmdlet programu Windows PowerShell