development

PowerShell에서 명령 줄 인수를 처리하는 방법

big-blog 2020. 2. 16. 20:42
반응형

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



반응형