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