2017-03-21 5 views
2

나는이 기능을

Function Do-ThisOrThat 
{ 
[cmdletbinding()] 
param (
    [Parameter(Mandatory = $false, ParameterSetName="First")] 
    [string]$FirstParam = "MyFirstParam", 

    [Parameter(Mandatory = $false, ParameterSetName="Second")] 
    [string]$SecondParam 
    ) 
    Write-Output "Firstparam: $FirstParam. SecondParam $SecondParam" 
} 

있습니다. 가능한가? 매개 변수를 지정한 경우에만 실행하면됩니다.

Do-ThisOrThat -FirstParam "Hello"

+0

'의 경우'첫 번째 '($ PSCmdlet.ParameterSetName의 -eq - 그리고 -not $ PSBoundPa rameters.ContainsKey ('FirstParam')) {<# $ FirstParam의 기본값은 #>}입니다.' –

답변

5

당신은 기본입니다 귀하의 파라미터 세트의 어느 PowerShell을 말할 필요 :이 일이 당신이 -SecondParameter 값뿐만 아니라 매개 변수없이 Do-ThisOrThat를 호출 할 수

[cmdletbinding(DefaultParameterSetName="First")] 

$FirstParam 두 경우 모두 기본값을 갖습니다. 인수를 지정하는 경우에

단, 귀하의 매개 변수 세트를 정의하는 방법에 따라 것을, 당신은 너무 위치 적으로 할 수 없습니다 - 당신은 매개 변수 이름 (-FirstParam 또는 -SecondParam)를 사용해야합니다.

3

이 질문은 다소 모호합니다. 기본 매개 변수 세트를 설정하려면

[CmdletBinding()] 속성에 DefaultParameterSetName 속성을 사용 :

[CmdletBinding(DefaultParameterSetName='First')] 

반면에 당신이 $FirstParam은 내부 기본값이 있는지 여부를 감지하고 추론하려는 경우 스크립트, 당신은 결정되어있는 매개 변수 세트를 확인하실 수 있습니다 FirstParam 매개 변수를 다음과 같이 호출에 의해 지정 여부 :

if($PSCmdlet.ParameterSetName -eq 'First' -and -not $PSBoundParameters.ContainsKey('FirstParam')){ 
    <# $FirstParam has default value #> 
}