Compartilhar via


Como invocar um cmdlet de dentro de um cmdlet

Este exemplo mostra como invocar um cmdlet de dentro de outro cmdlet, que permite adicionar a funcionalidade do cmdlet invocado ao cmdlet que você está desenvolvendo. Neste exemplo, o Get-Process cmdlet é invocado para obter os processos em execução no computador local. A chamada para o Get-Process cmdlet é equivalente ao comando a seguir. Esse comando recupera todos os processos cujos nomes começam com os caracteres "a" por meio de "t".

Get-Process -name [a-t]

Importante

Você pode invocar somente os cmdlets que derivam diretamente da classe System. Management. Automation. cmdlet . Não é possível invocar um cmdlet derivado da classe System. Management. Automation. PSCmdlet .

Para invocar um cmdlet de dentro de um cmdlet

  1. Verifique se o assembly que define o cmdlet a ser invocado é referenciado e se a using instrução apropriada foi adicionada. Neste exemplo, os namespaces a seguir são adicionados.

    using System.Diagnostics;
    using System.Management.Automation;   // Windows PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // Windows PowerShell assembly.
    
  2. No método de processamento de entrada do cmdlet, crie uma nova instância do cmdlet a ser invocada. Neste exemplo, um objeto do tipo Microsoft. PowerShell. Commands. Getprocesscommand é criado junto com a cadeia de caracteres que contém os argumentos que são usados quando o cmdlet é invocado.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Chame o método System. Management. Automation. cmdlet. Invoke * para invocar o Get-Process cmdlet.

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

Exemplo

Neste exemplo, o Get-Process cmdlet é invocado de dentro do método System. Management. Automation. cmdlet. BeginProcessing de um cmdlet.

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

Consulte Também

Escrevendo um Cmdlet do Windows PowerShell