명령 줄 인수를 처리하는 가장 좋은 방법은 무엇입니까?
“최상의”방법이 무엇인지에 대한 몇 가지 답변이있는 것처럼 보이며 결과적으로 다음과 같이 간단한 것을 처리하는 방법에 붙어 있습니다.
script.ps1 /n name /d domain
과
script.ps1 /d domain /n name.
더 잘 처리 할 수있는 플러그인이 있습니까? 나는 여기서 바퀴를 재발 명하고 있다는 것을 안다.
분명히 내가 이미 가지고있는 것은 예쁘지 않고 확실히 “최고”가 아니지만 효과가 있습니다. 그리고 그것은 추악합니다.
for ( $i = 0; $i -lt $args.count; $i++ ) {
if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain
답변
당신은 바퀴를 재발 명하고 있습니다. 일반 PowerShell 스크립트에는 다음과 -
같이로 시작하는 매개 변수가 있습니다.script.ps1 -server http://devserver
그런 다음 param
파일 시작 부분 에서 섹션 을 처리합니다 .
매개 변수에 기본값을 할당하거나 사용할 수없는 경우 콘솔에서 기본값을 읽거나 스크립트 실행을 중지 할 수도 있습니다.
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
스크립트 안에서 간단히
write-output $server
모든 매개 변수가 스크립트 범위에서 사용 가능한 변수가되기 때문입니다.
이 예 $server
에서 스크립트는 스크립트없이 호출되면 기본값을 가져오고 -username
매개 변수 를 생략하면 스크립트가 중지 되고 -password
생략 된 경우 터미널 입력을 요청합니다 .
업데이트 : “flag”(부울 true / false 매개 변수)를 PowerShell 스크립트에 전달할 수도 있습니다. 예를 들어, 스크립트를 사용하지 않으면 스크립트가보다 신중한 모드로 실행되는 “강제”를 사용할 수 있습니다.
해당 키워드는 [switch]
매개 변수 유형입니다.
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
스크립트 내부에서 다음과 같이 작업합니다.
if ($force) {
//deletes a file or does something "bad"
}
이제 스크립트를 호출 할 때 switch / flag 매개 변수를 다음과 같이 설정했습니다.
.\yourscript.ps1 -server "http://otherserver" -force
플래그가 설정되어 있지 않다고 명시 적으로 나타내려면 특별한 구문이 있습니다.
.\yourscript.ps1 -server "http://otherserver" -force:$false
관련 Microsoft 설명서에 대한 링크 (PowerShell 5.0의 경우, 버전 3.0 및 4.0도 링크에서 사용 가능) :