PowerShell에서 명령 줄 인수를 처리하는 방법
명령 줄 인수를 처리하는 "최상의"방법은 무엇입니까?
"최상의"방법이 무엇인지에 대한 몇 가지 답변이있는 것처럼 보이며 결과적으로 다음과 같이 간단한 것을 처리하는 방법에 붙어 있습니다.
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 스크립트로 전달할 수도 있습니다. 예를 들어, 스크립트는 강제를 사용하지 않을 때 스크립트가보다 신중한 모드로 실행되는 "force"를 허용 할 수 있습니다.
해당 키워드는 [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도 링크에서 사용 가능) :
참고 URL : https://stackoverflow.com/questions/2157554/how-to-handle-command-line-arguments-in-powershell
'development' 카테고리의 다른 글
파이썬에서 현재 시간을 밀리 초 단위로 얻으시겠습니까? (0) | 2020.02.16 |
---|---|
캐리지 리턴, 줄 바꿈 및 용지 공급이란 무엇입니까? (0) | 2020.02.16 |
긴 형식을 지정하는 printf의 주장은 무엇입니까? (0) | 2020.02.16 |
SSH를 통한 파일 전송 (0) | 2020.02.16 |
모든 레코드를 반환하는 Elasticsearch 쿼리 (0) | 2020.02.16 |