codememo

PowerShell 선택적 인수가 호출자에 의해 설정되었는지 확인하는 방법

tipmemo 2023. 8. 21. 21:21
반응형

PowerShell 선택적 인수가 호출자에 의해 설정되었는지 확인하는 방법

다음과 같은 인수를 사용하는 스크립트가 있습니다.

param (
    [parameter(Mandatory=$true)][ValidateRange(1, [int]::MaxValue)]
    [Int]$startRevision,

    [parameter(Mandatory=$true)][ValidateRange(1, [int]::MaxValue)]
    [Int]$endRevision,

    [parameter(Mandatory=$false)][ValidateRange(1, [int]::MaxValue)]
    [Int]$stepSize = 10,

    [parameter(Mandatory=$false)]
    [String]$applicationToBuild
)

마지막 인수는 선택사항이기 때문에 인수가 설정되었는지 알고 싶습니다.이것을 할 수 있는 방법이 있습니까?

변수가 설정되어 있지 않으면 변수를 사용하고 싶지 않기 때문에 기본값이 올바르지 않습니다.기본값인 "This IsNotSet"을 사용하여 값이 이 문자열과 동일한지 확인할 수 있지만 더 나은 해결책이 있습니까?

자동 변수는 함수 내부에서 사용할 수 있는 해시 테이블과 유사한 개체로,[1] 속성에는 호출 시 인수가 명시적으로 전달된 모든 매개 변수의 이름이 포함되어 있습니다.

그래서, 당신의 경우에는$PSBoundParameters.ContainsKey('applicationToBuild')인수가 전달되었는지 여부를 알려줍니다.-applicationToBuild(표현은 다음과 같이 평가됨)$True) 여부($False).


참고: 이 접근 방식의 장점은 모호하지 않다는 것이지만, intrbox의 답변처럼 매개 변수 변수 유형의 기본값을 테스트하면 인수를 전달하지 않는 것과 유형의 기본값( 경우 빈 문자열)을 명시적으로 전달하는 것구별할 수 없습니다.


기본값을 통해 암묵적으로 바인딩된 매개 변수는 포함되지 않습니다. GitHub 문제 #3285에서 논의된 것처럼 후자를 포함하면 인수를 다른 함수로 전달할 때 유용합니다.

$applicationToBuild매개 변수의 유형이 다음과 같기 때문에 스크립트에 아무 것도 전달되지 않는 경우 빈 문자열입니다.[String].
파라미터가 "설정되지 않은" 경우,$applicationToBuild.Length될 것이다0.

매개 변수를 사용할지 여부를 결정할 때 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/48643250/how-to-check-if-a-powershell-optional-argument-was-set-by-caller

반응형