programing

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

testmans 2023. 4. 20. 20:07
반응형

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

그런 다음 그것들을 처리한다.paramsection (스크립트의 첫 번째 줄에서 시작해야 합니다)

파라미터에 기본값을 할당하거나, 사용할 수 없는 경우 콘솔에서 읽거나, 스크립트 실행을 중지할 수도 있습니다.

 param (
    [string]$server = "http://defaultserver",
    [Parameter(Mandatory=$true)][string]$username,
    [string]$password = $( Read-Host "Input password, please" )
 )

스크립트 내에서 간단하게

write-output $server

모든 파라미터가 스크립트 범위에서 사용 가능한 변수가 되기 때문입니다.

이 예에서는$server스크립트를 호출하지 않고 디폴트값을 취득하면 스크립트가 정지합니다.-usernameparameter 및 terminal input을 요구합니다.-password생략되어 있습니다.

업데이트: PowerShell 스크립트에 "플래그"(부울 True/False 매개 변수)를 전달할 수도 있습니다.예를 들어, 스크립트는 force를 사용하지 않을 때 스크립트가 보다 신중한 모드로 실행되는 "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

반응형