Compartir a través de


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 parámetro Department se agrega al cmdlet cada vez que el usuario especifica el parámetro switch de Employee. Para obtener más información sobre los parámetros dinámicos, consulte Cmdlet Dynamic Parameters.

Para definir parámetros dinámicos

  1. En la declaración de clase de cmdlet, agregue la interfaz System.Management.Automation.IDynamicParameters tal 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 se especifica el parámetro Employee.

    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, se agrega el parámetro Department cada vez que el usuario especifica el parámetro Employee. El parámetro Department es un parámetro 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;

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

Véase también