Come richiamare un cmdlet da un altro cmdletHow to Invoke a Cmdlet from Within a Cmdlet

In questo esempio viene illustrato come richiamare un cmdlet da un altro cmdlet, che consente di aggiungere la funzionalità del cmdlet richiamato al cmdlet che si sta sviluppando.This example shows how to invoke a cmdlet from within another cmdlet, which allows you to add the functionality of the invoked cmdlet to the cmdlet you are developing. In questo esempio Get-Process viene richiamato il cmdlet per ottenere i processi in esecuzione nel computer locale.In this example, the Get-Process cmdlet is invoked to get the processes that are running on the local computer. La chiamata al Get-Process cmdlet è equivalente al comando seguente.The call to the Get-Process cmdlet is equivalent to the following command. Questo comando recupera tutti i processi i cui nomi iniziano con i caratteri "a" e "t".This command retrieves all the processes whose names start with the characters "a" through "t".

Get-Process -name [a-t]

Importante

È possibile richiamare solo i cmdlet che derivano direttamente dalla classe System. Management. Automation. cmdlet .You can invoke only those cmdlets that derive directly from the System.Management.Automation.Cmdlet class. Non è possibile richiamare un cmdlet che deriva dalla classe System. Management. Automation. PSCmdlet .You cannot invoke a cmdlet that derives from the System.Management.Automation.PSCmdlet class.

Per richiamare un cmdlet all'interno di un cmdletTo invoke a cmdlet from within a cmdlet

  1. Verificare che venga fatto riferimento all'assembly che definisce il cmdlet da richiamare e che l'istruzione appropriata using venga aggiunta.Ensure that the assembly that defines the cmdlet to be invoked is referenced and that the appropriate using statement is added. In questo esempio vengono aggiunti gli spazi dei nomi seguenti.In this example, the following namespaces are added.

    using System.Diagnostics;
    using System.Management.Automation;   // Windows PowerShell assembly.
    using Microsoft.PowerShell.Commands;  // Windows PowerShell assembly.
    
  2. Nel metodo di elaborazione dell'input del cmdlet creare una nuova istanza del cmdlet da richiamare.In the input processing method of the cmdlet, create a new instance of the cmdlet to be invoked. In questo esempio viene creato un oggetto di tipo Microsoft. PowerShell. Commands. Getprocesscommand insieme alla stringa che contiene gli argomenti utilizzati quando viene richiamato il cmdlet.In this example, an object of type Microsoft.PowerShell.Commands.Getprocesscommand is created along with the string that contains the arguments that are used when the cmdlet is invoked.

    GetProcessCommand gp = new GetProcessCommand();
    gp.Name = new string[] { "[a-t]*" };
    
  3. Chiamare il metodo System. Management. Automation. cmdlet. Invoke * per richiamare il Get-Process cmdlet.Call the System.Management.Automation.Cmdlet.Invoke* method to invoke the Get-Process cmdlet.

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

EsempioExample

In questo esempio, il Get-Process cmdlet viene richiamato dall'interno del metodo System. Management. Automation. cmdlet. BeginProcessing di un cmdlet.In this example, the Get-Process cmdlet is invoked from within the System.Management.Automation.Cmdlet.BeginProcessing method of a 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 + "!");
    }
  }
}

Vedere ancheSee Also

Scrittura di un cmdlet di Windows PowerShellWriting a Windows PowerShell Cmdlet