2017-12-21 8 views
1

라이브러리 모듈에 대해 작성하는 상당히 복잡한 함수가 있는데, 호출 할 수있는 여러 가지 방법이 많이 있습니다. 그러나 실제로 모든 매개 변수를 기본값으로 설정할 수는 있지만 매개 변수없이 함수를 호출하려고하면 매개 변수 집합을 결정할 수 없으므로 호출이 실패합니다.매개 변수없는 powershell 매개 변수 집합을 정의하는 방법이 있습니까?

아무런 매개 변수가없는 매개 변수 집합을 정의하고 싶습니다. 매개 변수없이 호출하면 성공합니다. 이것은 ParameterSetName이 Parameter 속성의 속성이기 때문에 어렵습니다. 아무 것도 지정할 수 없습니다.

param 블록에있는 CmdletBinding 특성의 DefaultParameterSet 속성을 사용하여 실험했지만 아무것도 작동하지 않는 것처럼 보였습니다. Powershell이 ​​기본 설정을 사용하려면 거기에 정의 된 매개 변수 집합 이름이 실제로 존재해야합니다.

현재이 유스 케이스의 가장 좋은 근사값은 필수 매개 변수가 없도록 매개 변수 집합 중 하나를 정의하는 것이지만 빈 문자열이나 null이 파이프 될 때 실패합니다.

이것이 가능합니까?

답변

3

물론입니다.

function Foo { 
    [CmdletBinding(DefaultParameterSetName='x')] 
    Param(
     [Parameter(Mandatory=$true, ParameterSetName='y')]$a, 
     [Parameter(Mandatory=$false, ParameterSetName='y')]$b, 
     [Parameter(Mandatory=$true, ParameterSetName='z')]$c, 
     [Parameter(Mandatory=$false)]$d 
    ) 

    "`$a: $a" 
    "`$b: $b" 
    "`$c: $c" 
    "`$d: $d" 
} 
+0

이를 확인하려면, 나는 또한'추가 "ParameterSetName : $ ($ PSCmdlet.ParameterSetName)"그냥 그렇지 않으면 사용하지 않는 기본 매개 변수 세트 이름을 지정'확인을, 그리고 당신이 제안한대로 작동합니다. 그러나 필자의 설명에 따르면이 함수에 $ null을 파이프하는 작업도 실패하지만, 필자의 요구 사항이 의미가 없다는 것을 의미하는 것을 고려해 보았습니다. 매개 변수없이 매개 변수로 값을 파이프하는 것은 모순입니다. 존재하지 않는 매개 변수 집합을 지정하는 것이 효과가 있다는 것을 아는 것이 좋습니다. 감사! – bwerks

+0

"존재하지 않음"이 아니라 "존재하지만 다른 매개 변수 세트가 일치하지 않을 때만 사용됩니다." –