Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este exemplo mostra como invocar um cmdlet binário que deriva de [System.Management.Automation.Cmdlet] diretamente de dentro de outro cmdlet binário, o que permite adicionar a funcionalidade do cmdlet invocado ao cmdlet binário que você está desenvolvendo. Neste exemplo, o cmdlet Get-Process é invocado para obter os processos que estão sendo executados no computador local. A chamada para o cmdlet Get-Process é equivalente ao comando a seguir. Este comando recupera todos os processos cujos nomes começam com os caracteres "a" a "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 obter um exemplo, consulte Como invocar um PSCmdlet de dentro de umPSCmdlet .
Para invocar um cmdlet de dentro de um cmdlet
Certifique-se de que o assembly que define o cmdlet a ser invocado seja referenciado e que a instrução
usingapropriada seja adicionada. Neste exemplo, os namespaces a seguir são adicionados.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.No método de processamento de entrada do cmdlet, crie uma nova instância do cmdlet a ser invocado. Neste exemplo, um objeto do tipo Microsoft.PowerShell.Commands.GetProcessCommand é criado junto com a cadeia de caracteres que contém os argumentos usados quando o cmdlet é invocado.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };Chame o System.Management.Automation.Cmdlet.Invoke* método para invocar o cmdlet
Get-Process.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Exemplo
Neste exemplo, o cmdlet Get-Process é invocado de dentro do System.Management.Automation.Cmdlet.BeginProcessing método de um 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 + "!");
}
}
}