Jak zadeklarować parametry dynamiczne

W tym przykładzie pokazano, jak zdefiniować parametry dynamiczne, które są dodawane do polecenia cmdlet w czasie wykonywania. W tym przykładzie parametr jest dodawany do polecenia cmdlet za każdym razem, Department gdy użytkownik określi parametr Employee switch. Aby uzyskać więcej informacji na temat parametrów dynamicznych, zobacz Parametry dynamiczne polecenia cmdlet.

Aby zdefiniować parametry dynamiczne

  1. W deklaracji klasy polecenia cmdlet dodaj interfejs System.Management.Automation.Idynamicparameters, jak pokazano poniżej.

    public class SendGreetingCommand : Cmdlet, IDynamicParameters
    
  2. Wywołaj metodę System.Management.Automation.Idynamicparameters.Getdynamicparameters*, która zwraca obiekt, w którym zdefiniowano parametry dynamiczne. W tym przykładzie metoda jest wywoływana, gdy Employee określono parametr .

    public object GetDynamicParameters()
    {
        if (employee)
        {
          context= new SendGreetingCommandDynamicParameters();
          return context;
        }
        return null;
    }
    private SendGreetingCommandDynamicParameters context;
    
  3. Zadeklaruj klasę definiującą parametry dynamiczne do dodania. Możesz użyć atrybutów użytych do zadeklarowania statycznych parametrów polecenia cmdlet w celu zadeklarowania parametrów dynamicznych.

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

Przykład

W tym przykładzie Department parametr jest dodawany za każdym razem, gdy użytkownik określi Employee parametr. Parametr Department jest opcjonalny, a atrybut ValidateSet służy do określania dozwolonych argumentów.

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

Zobacz też

System.Management.Automation.Runtimedefinedparameterdictionary

System.Management.Automation.Idynamicparameters.Getdynamicparameters*

Dynamiczne parametry poleceń cmdlet

Windows PowerShell SDK