Condividi tramite


Come dichiarare i parametri dinamici

Questo esempio illustra come definire parametri dinamici aggiunti al cmdlet in fase di esecuzione. In questo esempio, il parametro Department viene aggiunto al cmdlet ogni volta che l'utente specifica il parametro switch Employee. Per altre informazioni sui parametri dinamici, vedere parametri dinamici del cmdlet .

Per definire parametri dinamici

  1. Nella dichiarazione di classe del cmdlet aggiungere l'interfaccia System.Management.Automation.IDynamicParameters come illustrato.

    public class SendGreetingCommand : Cmdlet, IDynamicParameters
    
  2. Chiamare il metodo System.Management.Automation.IDynamicParameters.GetDynamicParameters*, che restituisce l'oggetto in cui sono definiti i parametri dinamici. In questo esempio il metodo viene chiamato quando viene specificato il parametro Employee.

    public object GetDynamicParameters()
    {
        if (employee)
        {
          context= new SendGreetingCommandDynamicParameters();
          return context;
        }
        return null;
    }
    private SendGreetingCommandDynamicParameters context;
    
  3. Dichiarare una classe che definisce i parametri dinamici da aggiungere. È possibile usare gli attributi usati per dichiarare i parametri dei cmdlet statici per dichiarare i parametri dinamici.

    public class SendGreetingCommandDynamicParameters
    {
      [Parameter]
      [ValidateSet ("Marketing", "Sales", "Development")]
      public string Department
      {
        get { return department; }
        set { department = value; }
      }
      private string department;
    }
    

Esempio

In questo esempio, il parametro Department viene aggiunto ogni volta che l'utente specifica il parametro Employee. Il parametro Department è un parametro facoltativo e l'attributo ValidateSet viene usato per specificare gli argomenti consentiti.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;     // PowerShell assembly.

namespace SendGreeting
{
  // Declare the cmdlet class that supports the
  // IDynamicParameters interface.
  [Cmdlet(VerbsCommunications.Send, "Greeting")]
  public class SendGreetingCommand : Cmdlet, IDynamicParameters
  {
    // Declare the parameters for the cmdlet.
    [Parameter(Mandatory = true)]
    public string Name
    {
      get { return name; }
      set { name = value; }
    }
    private string name;

    [Parameter]
    [Alias ("FTE")]
    public SwitchParameter Employee
    {
      get { return employee; }
      set { employee = value; }
    }
    private Boolean employee;

    // Implement GetDynamicParameters to
    // retrieve the dynamic parameter.
    public object GetDynamicParameters()
    {
      if (employee)
      {
        context= new SendGreetingCommandDynamicParameters();
        return context;
      }
      return null;
   }
   private SendGreetingCommandDynamicParameters context;

    // 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 + "! ");
      if (employee)
      {
        WriteObject("Department: " + context.Department);
      }
    }
  }

  // Define the dynamic parameters to be added
  public class SendGreetingCommandDynamicParameters
  {
    [Parameter]
    [ValidateSet ("Marketing", "Sales", "Development")]
    public string Department
    {
      get { return department; }
      set { department = value; }
    }
    private string department;
  }
}

Vedere anche