HOWTO · PowerShell

PowerShell의 매개변수에서 여러 값

이 기사에서는 매개변수 함수, 매개변수에서 정의할 수 있는 다양한 종류의 변수, 단일 매개변수에서 여러 값을 처리하는 방법 및 그 사용 예에 대해 논의할 것입니다.

인수는 PowerShell 매개변수 함수 param을 사용하여 처리합니다. 이는 모든 스크립트의 기본 구성 요소로, 개발자가 실행 시간에 입력을 제공할 수 있도록 합니다.

또한, 스크립트의 동작을 변경해야 하는 경우, 매개변수는 기본 코드를 변경하지 않고도 그렇게 할 수 있는 기회를 제공합니다.

이 문서에서는 parameter 함수, 정의할 수 있는 다양한 변수, 하나의 매개변수에서 여러 값을 처리하는 방법, 그리고 샘플 사용법에 대해 논의할 것입니다.

PowerShell의 Parameter 함수 이해하기

관리자는 매개변수 함수 param()을 사용하여 스크립트에 대한 매개변수를 생성할 수 있습니다.

내부에는 변수로 정의된 하나 이상의 매개변수를 포함하는 매개변수 함수가 있습니다.

param ($myVariable)

그러나 매개변수가 필요한 입력 유형만 수용하도록 하려면, 변수를 감싸기 위해 대괄호 []를 사용하여 매개변수에 데이터 유형을 할당하는 것이 가장 좋습니다.

param ([String]$myVariable)

–>

다른 데이터 유형인 정수, 부동 소수점, DateTime도 사용할 수 있다는 점은 주목할 가치가 있습니다. 또한 추가로 설명할 데이터 유형인 Boolean으로 할당할 수도 있습니다.

PowerShell에서 Named 매개변수 사용하기

스크립트에서 매개변수 함수를 사용하는 것은 named 매개변수를 통해 이루어집니다.

named 매개변수를 통해 스크립트나 함수에 값을 전달할 때, 변수의 이름을 매개변수의 전체 이름으로 사용할 수 있습니다.

sample.ps1:

param ([String]$name)
Write-Output $name

그런 다음 .ps1 파일을 실행할 때 named 매개변수를 사용할 수 있습니다.

powershell.exe .\sample.ps1 -name "John"

PowerShell에서 매개변수에 기본값 사용하기

스크립트 내에서 매개변수에 기본값을 미리 할당할 수 있습니다.

또한, 명령 행에서 값을 전달하지 않고 스크립트를 실행하면 스크립트 내부에서 정의된 기본 변수를 가져옵니다.

param ([String]$name = "John")

PowerShell에서 Switch 매개변수 사용하기

스크립트를 위해 또 다른 매개변수 유형인 switch 매개변수를 사용할 수 있습니다. 이는 [switch] 데이터 유형으로 정의됩니다.

이 매개변수는 주로 이전에 논의한 이진 또는 Boolean 값에 사용되며, true 또는 false의 값을 나타냅니다.

param ([switch]$isEnabled)

–>

PowerShell에서 Mandatory 매개변수 사용하기

어떤 사용 사례에서는 스크립트가 실행될 때 사용해야 하는 하나 이상의 매개변수를 갖는 것이 일반적입니다.

매개변수 블록 [Parameter()] 내에 Mandatory 속성을 추가하여 필수 매개변수를 정의할 수 있습니다.

param (
    [Parameter(Mandatory)]
    [String] $servername
)

스크립팅 환경은 명령 행에서 값이 제공되지 않는 경우 스크립트 실행을 허용하지 않습니다.

PowerShell에서 알 수 없는 수의 인수 사용하기

일반적으로 지정된 매개변수를 사용하는 것이 단순히 명령 행에서 인수를 읽는 것보다 훨씬 우수하다고 생각합니다. 알 수 없는 수의 인수를 처리해야 할 때 인수를 읽는 것이 더 쉽습니다.

드라이브 문자를 예로 들어보겠습니다. 아마도 기계에서 하나 이상의 드라이브를 확인하는 스크립트가 필요할 것입니다.

그런 다음, 우리는 named 매개변수를 사용하고 이를 String 데이터 유형으로 선언할 수 있습니다.

checkdrives.ps1:

param([String]$myDrive)

foreach ($drive in $myDrive) {
    Write-Output "Processing drive $drive"
}

그러나 여러 드라이브 문자를 인수로 전달하면 PowerShell은 이를 하나의 객체로 취급합니다.

powershell .\checkdrives.ps1 -myDrive C, D, E

출력:

Processing drive C D E

PowerShell은 쉼표를 공백으로 대체하여 하나의 변수로 취급합니다. 불행히도, 우리 사용 사례에서 드라이브를 개별적으로 처리해야 하기 때문에 이는 작동하지 않을 것입니다.

우리 인터프리터가 하나의 인수 아래 여러 매개변수를 캡처하려면 데이터 유형을 대괄호 []로 배열로 변경해야 합니다. 그런 다음, 실행될 때 PowerShell은 나열된 인수를 개별적으로 처리할 것입니다.

checkdrives.ps1:

param([String[]]$myDrive)

foreach ($drive in $myDrive) {
    Write-Output "Processing drive $drive"
}

예시 코드:

powershell .\checkdrives.ps1 -myDrive C, D, E

인수는 쉼표로 구분해야 합니다.

출력:

Processing drive C
Processing drive D
Processing drive E

PowerShell에서 파이프라인 매개변수 사용하기

대부분의 PowerShell cmdlet은 데이터를 전달할 때 파이프 | 기호를 사용할 수 있게 해 줍니다. 우리는 매개변수와 관련하여 이를 활용할 수 있습니다.

예를 들어, 파이프라인에 저장된 마지막 값을 가져와서 매개변수 블록의 ValueFromPipeline 속성을 사용하여 다른 PowerShell 파일로 전달할 수 있습니다.

pipeline.ps1:

param([parameter(ValueFromPipeline)]$pipedVar)

Write-Output $pipedVar

예시 코드:

"This string is from the pipeline." | .\pipeline.ps1

출력:

This string is from the pipeline.

이 기술을 활용하면 연결된 PowerShell 파일을 실행할 수 있는 많은 기회를 열어줍니다.