Partager via


Guide pratique pour déclarer des paramètres dynamiques

Cet exemple montre comment définir des paramètres dynamiques ajoutés à l’applet de commande au moment de l’exécution. Dans cet exemple, le paramètre Department est ajouté à l’applet de commande chaque fois que l’utilisateur spécifie le paramètre de commutateur Employee. Pour plus d’informations sur les paramètres dynamiques, consultez Paramètres dynamiques de l’applet de commande.

Pour définir des paramètres dynamiques

  1. Dans la déclaration de classe d’applet de commande, ajoutez l’interface System.Management.Automation.IDynamicParameters comme indiqué.

    public class SendGreetingCommand : Cmdlet, IDynamicParameters
    
  2. Appelez la méthode System.Management.Automation.IDynamicParameters.GetDynamicParameters*, qui retourne l’objet dans lequel les paramètres dynamiques sont définis. Dans cet exemple, la méthode est appelée lorsque le paramètre Employee est spécifié.

    public object GetDynamicParameters()
    {
        if (employee)
        {
          context= new SendGreetingCommandDynamicParameters();
          return context;
        }
        return null;
    }
    private SendGreetingCommandDynamicParameters context;
    
  3. Déclarez une classe qui définit les paramètres dynamiques à ajouter. Vous pouvez utiliser les attributs que vous avez utilisés pour déclarer les paramètres d’applet de commande statique pour déclarer les paramètres dynamiques.

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

Exemple :

Dans cet exemple, le paramètre Department est ajouté chaque fois que l’utilisateur spécifie le paramètre Employee. Le paramètre Department est un paramètre facultatif, et l’attribut ValidateSet est utilisé pour spécifier les arguments autorisés.

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

Voir aussi