Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo invocar un cmdlet binario que deriva de [System.Management.Automation.Cmdlet]
directamente desde otro cmdlet binario, lo que permite agregar la funcionalidad del cmdlet invocado al cmdlet binario que está desarrollando. En este ejemplo, se invoca el cmdlet Get-Process
para obtener los procesos que se ejecutan en el equipo local. La llamada al cmdlet Get-Process
es equivalente al siguiente comando. Este comando recupera todos los procesos cuyos nombres comienzan por los caracteres "a" a "t".
Get-Process -Name [a-t]*
Importante
Solo puede invocar esos cmdlets que derivan directamente de la clase System.Management.Automation.Cmdlet. No se puede invocar un cmdlet que derive de la clase System.Management.Automation.PSCmdlet. Para obtener un ejemplo, vea Cómo invocar un PSCmdlet desde unpsCmdlet.
Para invocar un cmdlet desde un cmdlet
Asegúrese de que se hace referencia al ensamblado que define el cmdlet al que se va a invocar y que se agrega la instrucción
using
adecuada. En este ejemplo, se agregan los siguientes espacios de nombres.using System.Diagnostics; using System.Management.Automation; // PowerShell assembly. using Microsoft.PowerShell.Commands; // PowerShell cmdlets assembly you want to call.
En el método de procesamiento de entrada del cmdlet, cree una nueva instancia del cmdlet que se va a invocar. En este ejemplo, se crea un objeto de tipo Microsoft.PowerShell.Commands.GetProcessCommand junto con la cadena que contiene los argumentos que se usan cuando se invoca el cmdlet.
GetProcessCommand gp = new GetProcessCommand(); gp.Name = new string[] { "[a-t]*" };
Llame al método System.Management.Automation.Cmdlet.Invoke* para invocar el cmdlet
Get-Process
.foreach (Process p in gp.Invoke<Process>()) { Console.WriteLine(p.ToString()); } }
Ejemplo
En este ejemplo, se invoca el cmdlet Get-Process
desde el método System.Management.Automation.Cmdlet.BeginProcessing de un 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 + "!");
}
}
}