다음을 통해 공유


동적 매개 변수를 선언하는 방법

이 예제에서는 런타임에 cmdlet에 추가되는 동적 매개 변수를 정의하는 방법을 보여줍니다. 이 예제에서는 Department 사용자가 switch 매개 변수를 지정할 때마다 매개 변수가 cmdlet에 Employee 추가됩니다. 동적 매개 변수에 대한 자세한 내용은 Cmdlet 동적 매개 변수 를 참조하세요.

동적 매개 변수를 정의하려면

  1. cmdlet 클래스 선언에서 표시된 것처럼 System.Management.Automation.Idynamicparameters 인터페이스를 추가합니다.

    public class SendGreetingCommand : Cmdlet, IDynamicParameters
    
  2. 동적 매개 변수가 정의된 개체를 반환하는 System.Management.Automation.Idynamicparameters.Getdynamicparameters* 메서드를 호출합니다. 이 예제에서 메서드는 매개 Employee 변수가 지정될 때 호출됩니다.

    public object GetDynamicParameters()
    {
        if (employee)
        {
          context= new SendGreetingCommandDynamicParameters();
          return context;
        }
        return null;
    }
    private SendGreetingCommandDynamicParameters context;
    
  3. 추가할 동적 매개 변수를 정의하는 클래스를 선언합니다. 정적 cmdlet 매개 변수를 선언하는 데 사용한 특성을 사용하여 동적 매개 변수를 선언할 수 있습니다.

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

예제

이 예제에서는 Department 사용자가 매개 변수를 지정할 때마다 Employee 매개 변수가 추가됩니다. Department매개 변수는 선택적 매개 변수이며 ValidateSet 특성은 허용되는 인수를 지정하는 데 사용됩니다.

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

참고 항목

System.Management.Automation.Runtimedefinedparameterdictionary

System.Management.Automation.Idynamicparameters.Getdynamicparameters*

Cmdlet 동적 매개 변수

Windows PowerShell SDK