다음을 통해 공유


Cmdlet 동적 매개 변수

Cmdlet은 다른 매개 변수의 인수가 특정 값인 경우와 같이 특별한 조건에서 사용자가 사용할 수 있는 매개 변수를 정의할 수 있습니다. 이러한 매개 변수는 런타임에 추가되며 필요한 경우에만 추가되므로 동적 매개 변수라고 합니다. 예를 들어 특정 스위치 매개 변수가 지정된 경우에만 여러 매개 변수를 추가하는 cmdlet을 디자인할 수 있습니다.

비고

공급자 및 PowerShell 함수는 동적 매개 변수를 정의할 수도 있습니다.

PowerShell cmdlet의 동적 매개 변수

PowerShell은 여러 공급자 cmdlet에서 동적 매개 변수를 사용합니다. 예를 들어 Get-ItemGet-ChildItem cmdlet은 Path 매개 변수가 인증서 공급자 경로를 지정하는 경우 런타임에 CodeSigningCert 매개 변수를 추가합니다. Path 매개 변수가 다른 공급자에 대한 경로를 지정하는 경우 CodeSigningCert 매개 변수를 사용할 수 없습니다.

다음 예제에서는 Get-Item 실행 시 런타임에 CodeSigningCert 매개 변수가 추가되는 방법을 보여 줍니다.

이 예제에서는 PowerShell 런타임이 매개 변수를 추가했으며 cmdlet이 성공했습니다.

Get-Item -Path Cert:\CurrentUser -CodeSigningCert
Location   : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}

이 예제에서는 FileSystem 드라이브가 지정되고 오류가 반환됩니다. 오류 메시지는 CodeSigningCert 매개 변수를 찾을 수 없음을 나타냅니다.

Get-Item -Path C:\ -CodeSigningCert
Get-Item : A parameter cannot be found that matches parameter name 'CodeSigningCert'.
At line:1 char:37
+  Get-Item -Path C:\ -CodeSigningCert <<<<
--------
    CategoryInfo          : InvalidArgument: (:) [Get-Item], ParameterBindingException
    FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetItemCommand

동적 매개 변수 지원

동적 매개 변수를 지원하려면 cmdlet 코드에 다음 요소를 포함해야 합니다.

인터페이스

System.Management.Automation.IDynamicParameters . 이 인터페이스는 동적 매개 변수를 검색하는 메서드를 제공합니다.

다음은 그 예입니다.

public class SendGreetingCommand : Cmdlet, IDynamicParameters

메서드

system.Management.Automation.IDynamicParameters.GetDynamicParameters . 이 메서드는 동적 매개 변수 정의를 포함하는 개체를 검색합니다.

다음은 그 예입니다.

 public object GetDynamicParameters()
 {
   if (employee)
   {
     context= new SendGreetingCommandDynamicParameters();
     return context;
   }
   return null;
}
private SendGreetingCommandDynamicParameters context;

클래스

추가할 동적 매개 변수를 정의하는 클래스입니다. 이 클래스에는 각 매개 변수에 대한 매개 변수 특성과 cmdlet에 필요한 선택적 별칭유효성 검사 특성이 포함되어야 합니다.

다음은 그 예입니다.

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

동적 매개 변수를 지원하는 cmdlet의 전체 예제는 동적 매개 변수선언하는 방법을 참조하세요.

참고하십시오