Cómo declarar los parámetros dinámicos

En este ejemplo se muestra cómo definir parámetros dinámicos que se agregan al cmdlet en tiempo de ejecución. En este ejemplo, el Department parámetro se agrega al cmdlet cada vez que el usuario especifica el parámetro Employee switch. Para obtener más información sobre los parámetros dinámicos, vea Parámetros dinámicos del cmdlet.

Para definir parámetros dinámicos

  1. En la declaración de clase de cmdlet, agregue la interfaz System.Management.Automation.Idynamicparameters como se muestra.

    public class SendGreetingCommand : Cmdlet, IDynamicParameters
    
  2. Llame al método System.Management.Automation.Idynamicparameters.Getdynamicparameters*, que devuelve el objeto en el que se definen los parámetros dinámicos. En este ejemplo, se llama al método cuando Employee se especifica el parámetro .

    public object GetDynamicParameters()
    {
        if (employee)
        {
          context= new SendGreetingCommandDynamicParameters();
          return context;
        }
        return null;
    }
    private SendGreetingCommandDynamicParameters context;
    
  3. Declare una clase que defina los parámetros dinámicos que se van a agregar. Puede usar los atributos que usó para declarar los parámetros del cmdlet estático para declarar los parámetros dinámicos.

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

Ejemplo

En este ejemplo, el Department parámetro se agrega cada vez que el usuario especifica el Employee parámetro. El Department parámetro es opcional y el atributo ValidateSet se usa para especificar los argumentos permitidos.

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;

    // Overide 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;
  }
}

Consulte también

System.Management.Automation.Runtimedefinedparameterdictionary

System.Management.Automation.Idynamicparameters.Getdynamicparameters*

Parámetros dinámicos del cmdlet

Windows PowerShell SDK