Powershell 비위치,
이 기본 패턴을 따르는 인수를 허용하는 파워셸(2.0) 스크립트를 만들려고 합니다.
.\{script name} [options] PATH
여기서 옵션은 임의의 수의 선택적 매개변수입니다. 자세한 내용은 '-v' 행을 따라 생각하십시오.PATH 인수는 마지막에 전달된 인수와 동일하며 필수입니다.옵션 없이 하나의 인수만 사용하여 스크립트를 호출할 수 있으며, 이 인수는 경로로 간주됩니다.선택적 매개 변수만 포함하고 위치가 지정되지 않은 매개 변수 목록을 설정하는 데 문제가 있습니다.
이 빠른 스크립트는 내가 안고 있는 문제를 보여줍니다.
#param test script
Param(
$firstArg,
$secondArg,
[switch]$thirdArg,
[Parameter(ValueFromRemainingArguments = $true)]
$remainingArgs)
write-host "first arg is $firstArg"
write-host "second arg is $secondArg"
write-host "third arg is $thirdArg"
write-host "remaining: $remainingArgs"
그렇게 불리는 경우:
.\param-test.ps1 firstValue secondValue
스크립트 출력:
first arg is firstValue
second arg is secondValue
third arg is False
remaining:
내가 만들려고 하는 동작은 두 인수가 모두 선택적 매개 변수를 통과하고 나머지 Args 변수로 끝날 것입니다.
이 질문/답변은 원하는 동작을 달성할 수 있는 방법을 제공했지만 적어도 하나의 필수 매개 변수가 있고 다른 모든 인수 앞에 와야만 작동하는 것 같습니다.
firstArg를 필수로 설정하고 위치를 0으로 지정하여 이 동작을 시연할 수 있습니다.
#param test script
Param(
[Parameter(Mandatory=$true, Position = 0)]
$firstArg,
$secondArg,
[switch]$thirdArg,
[Parameter(ValueFromRemainingArguments = $true)]
$remainingArgs)
write-host "first arg is $firstArg"
write-host "second arg is $secondArg"
write-host "third arg is $thirdArg"
write-host "remaining: $remainingArgs"
이전과 동일한 입력으로 실행:
.\param-test.ps1 firstValue secondValue
출력은 다음과 같습니다.
first arg is firstValue
second arg is
third arg is False
remaining: secondValue
첫 번째, 필수 인수가 할당되고 남은 모든 것이 끝까지 적용됩니다.
문제는 다음과 같습니다.모든 매개 변수가 선택 사항이고 위치가 지정되지 않도록 매개 변수 목록을 설정하려면 어떻게 해야 합니까?
이건 어때?
function test
{
param(
[string] $One,
[string] $Two,
[Parameter(Mandatory = $true, Position = 0)]
[string] $Three
)
"One = [$one] Two = [$two] Three = [$three]"
}
One
그리고.Two
는 선택 사항이며 이름으로만 지정할 수 있습니다.Three
는 필수 항목이며 이름 없이 제공될 수 있습니다.
다음 작업:
test 'foo'
One = [] Two = [] Three = [foo]
test -One 'foo' 'bar'
One = [foo] Two = [] Three = [bar]
test 'foo' -Two 'bar'
One = [] Two = [bar] Three = [foo]
실패합니다.
test 'foo' 'bar'
test : A positional parameter cannot be found that accepts argument 'bar'.
At line:1 char:1
+ test 'foo' 'bar'
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [test], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,test
이렇게 하면 필수 인수가 마지막에 배치되거나 이름이 지정되지 않습니다.하지만 그것은 당신이 원하는 기본적인 사용 패턴을 허용합니다.
또한 다음에서 둘 이상의 값을 허용하지 않습니다.$Three
이것이 당신이 원하는 것일 수도 있습니다.그러나 이름이 지정되지 않은 여러 개의 매개 변수를 다음의 일부로 취급하려는 경우$Three
그런 다음 추가합니다.ValueFromRemainingArguments
기여하다.
function test
{
param(
[string] $One,
[string] $Two,
[Parameter(Mandatory = $true, Position = 0, ValueFromRemainingArguments = $true)]
[string] $Three
)
"One = [$one] Two = [$two] Three = [$three]"
}
다음과 같은 작업이 있습니다.
test -one 'foo' 'bar' 'baz'
One = [foo] Two = [] Three = [bar baz]
아니 심지어
test 'foo' -one 'bar' 'baz'
One = [bar] Two = [] Three = [foo baz]
언급URL : https://stackoverflow.com/questions/12375919/powershell-non-positional-optional-params
'programing' 카테고리의 다른 글
argv[n]가 쓰기 가능합니까? (0) | 2023.09.01 |
---|---|
시드 가능한 JavaScript 난수 생성기 (0) | 2023.09.01 |
로드 시 색상이 지정된 이미지에 잘못된 색상을 부여하는 CV 열기 (0) | 2023.09.01 |
"실행 중인 스크립트가 이 시스템에서 비활성화됨"을 수정하는 방법은 무엇입니까? (0) | 2023.09.01 |
중첩된 사전 및 목록에서 키의 모든 항목 찾기 (0) | 2023.09.01 |