Freigeben über


Deklarieren von dynamischen Parametern

In diesem Beispiel wird gezeigt, wie Dynamische Parameter definiert werden, die dem Cmdlet zur Laufzeit hinzugefügt werden. In diesem Beispiel wird der parameter Department dem Cmdlet hinzugefügt, wenn der Benutzer den Employee Switch-Parameter angibt. Weitere Informationen zu dynamischen Parametern finden Sie unter Cmdlet Dynamic Parameters.

So definieren Sie dynamische Parameter

  1. Fügen Sie in der Cmdlet-Klassendeklaration die System.Management.Automation.IDynamicParameters Schnittstelle hinzu, wie dargestellt.

    public class SendGreetingCommand : Cmdlet, IDynamicParameters
    
  2. Rufen Sie die System.Management.Automation.IDynamicParameters.GetDynamicParameters*-Methode auf, die das Objekt zurückgibt, in dem die dynamischen Parameter definiert sind. In diesem Beispiel wird die Methode aufgerufen, wenn der parameter Employee angegeben wird.

    public object GetDynamicParameters()
    {
        if (employee)
        {
          context= new SendGreetingCommandDynamicParameters();
          return context;
        }
        return null;
    }
    private SendGreetingCommandDynamicParameters context;
    
  3. Deklarieren Sie eine Klasse, die die hinzuzufügenden dynamischen Parameter definiert. Sie können die Attribute verwenden, die Sie zum Deklarieren der statischen Cmdlet-Parameter verwendet haben, um die dynamischen Parameter zu deklarieren.

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

Beispiel

In diesem Beispiel wird der parameter Department hinzugefügt, wenn der Benutzer den parameter Employee angibt. Der Department-Parameter ist ein optionaler Parameter, und das ValidateSet-Attribut wird verwendet, um die zulässigen Argumente anzugeben.

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

Siehe auch