파워셸 함수 매개변수
- PowerShell 함수 매개변수 정의
- PowerShell 함수의 명명된 매개변수
- PowerShell 함수의 위치 기반 매개변수
- PowerShell 함수에서 스위치 매개변수
- PowerShell 함수 매개변수에서 스플래팅
- PowerShell 매개변수 속성
- 명명된 매개변수 구문을 가진 고급 함수

PowerShell 함수 매개변수는 사용자들이 특정 값을 입력하지 못하도록 특성과 인수를 활용하여 함수를 더욱 강력하게 만듭니다. 이는 광범위한 스크립트를 작성하지 않도록 몇 가지 규칙 및 유효성을 추가하며, 사용하기 간단합니다.
명령줄을 통해서도 함수 매개변수 지정 후 인수를 제공할 수 있습니다. 명명된, 위치 기반, 스위치 및 동적 매개변수 모두 함수 매개변수의 예입니다. 함수 매개변수는 기본 함수를 더 복잡하게 만드는 데에도 사용될 수 있습니다.
PowerShell 함수 매개변수 정의
매개변수는 다음과 같이 정의됩니다.
param(
$Parameter1
)
모범 사례는 매개변수에 유형을 추가하고 특정한 입력만 받도록 보장하기 위해 Parameter()
블록을 삽입함으로써 향후 더 많은 기능을 활성화할 것을 권장합니다. 따라서 아래와 같이 수행됩니다.
param(
[Parameter()]
[string]$Parameter1
)
추가 매개변수도 위의 구문에 추가할 수 있으며, 아래와 같이 보여집니다.
param(
[Parameter()]
[string]$Param1,
[Parameter()]
[string]$Param2
)
Write-Host "Param1 value is $Param1"
Write-Host "Param 2 value is $Param2"
PowerShell 함수의 명명된 매개변수
명명된 매개변수는 스크립트 내에서 PowerShell 함수 매개변수를 사용하는 하나의 기법입니다. 명명된 매개변수를 가진 스크립트나 함수를 호출할 때는 인수의 전체 이름을 사용합니다.
위의 PowerShell 스크립트가 test.ps1
에 저장되어 있다고 가정해봅시다. 여기서 param1과 param2에 값을 제공할 것이며, 아래 예제에서 매개변수의 전체 이름이 전달되어야 함을 알 수 있습니다.
./test.ps1 -Param1 'value' -Param2 'valuenext'
출력:
이 스크립트를 실행하면 각 인수 변수가 런타임에 제공된 값으로 대체된 내용을 볼 수 있습니다.
PowerShell 함수의 위치 기반 매개변수
이름 대신 위치로 항목을 전달하는 것은 매개변수를 활용하는 또 다른 방법입니다. 매개변수 값을 위치로 전달할 때 매개변수의 이름은 사용되지 않습니다. 대신 PowerShell은 각 인수의 값을 함수 내 위치와 비교합니다. PowerShell은 Param1이 코드에서 Param2보다 먼저 지정되었다고 인식하고 올바른 순서로 값을 일치시킵니다.
./test.ps1 'value' 'valuenext'
출력
Param1 value value
Param 2 value is valuenext
위의 예제에서 param1과 param2는 문자열 유형으로 선언되었지만, 이것이 사용할 수 있는 유일한 유형은 아닙니다. .NET 클래스 라이브러리의 모든 유형을 사용할 수 있습니다.
원래 순서 외에도 매개변수 구조 내에서 위치를 제공하여 앞으로 나아갈 수도 있습니다. 아래에 표시되어 있습니다.
param(
[Parameter(position = 1)]
[string]$Param1,
[Parameter(position = 0)]
[string]$Param2
)
Write-Host "Param1 value is $Param1"
Write-Host "Param 2 value is $Param2"
여기서 매개변수의 순서가 변경된 것을 확인할 수 있습니다.
./test.ps1 'param2' 'param1'
PowerShell 함수에서 스위치 매개변수
이 매개변수는 어떤 것이 켜져 있는지 또는 꺼져 있는지를 이진 또는 부울 값으로 표시하는 데 사용됩니다. 이를 지정하기 위해 switch
유형이 사용됩니다. 위의 예제를 계속 진행하면서 DisplayParam2
라는 다른 스위치 매개변수를 추가할 것입니다.
param(
[Parameter()]
[string]$Param1,
[Parameter()]
[string]$Param2,
[Parameter()]
[switch]$DisplayParam2
)
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
Write-Host "Param2 value is $Param2"
}
출력:
PowerShell 함수 매개변수에서 스플래팅
스플래팅은 매개변수가 많을 때 주로 사용됩니다. 명령을 실행하기 전에 스크립트를 위한 매개변수를 설정하는 것을 스플래팅이라고 합니다. 지금까지 매개변수에 값을 정의하고 런타임 동안 전달해왔습니다. 아래에 나타나는 매개변수 모음이 있는 경우 문제가 될 수 있습니다.
param(
[Parameter()]
[string]$Param1,
[Parameter()]
[string]$Param2,
[Parameter()]
[switch]$DisplayParam2,
[Parameter()]
[string]$Param3,
[Parameter()]
[string]$Param4,
[Parameter()]
[string]$Param5,
[Parameter()]
[string]$Param6,
[Parameter()]
[string]$Param7
)
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
Write-Host "Param2 value is $Param2"
}
Write-Host "Param3 value is $Param3"
Write-Host "Param4 value is $Param4"
Write-Host "Param5 value is $Param5"
Write-Host "Param6 value is $Param6"
Write-Host "Param7 value is $Param7"
우측으로 슬라이드하는 대신, 매개변수 값을 분리된 단계에서 지정하기 위해 해시 테이블을 사용할 수 있습니다. 매개변수 값이 깔끔하게 정렬되어 어떤 값이 사용 중인지 이해하기 훨씬 쉽습니다.
해시 테이블이 설정되면, 해시 테이블의 이름 뒤에 @
문자를 붙여 모든 인수를 스크립트로 전달할 수 있습니다.
$params = @{
Param1 = 'value'
Param2 = 'valuenext'
Param3 = 'somevalue'
Param4 = 'somevalue'
Param5 = 'somevalue'
Param6 = 'somevalue'
Param7 = 'somevalue'
DisplayParam2 = $true
}
PS> ./test.ps1 @params
PowerShell 매개변수 속성
매개변수 특성은 다양한 방법으로 매개변수 기능을 변경할 수 있게 해줍니다. 정규 표현식을 사용하여 정규 표현식에 맞추고, 주어진 매개변수의 사용을 의무화하고, 매개변수에 제공된 값의 유효성을 검사할 수 있습니다.
필수 매개변수
PowerShell에서는 우리의 필요에 따라 함수에서 하나 이상의 속성을 의무화할 수 있습니다. 따라서 Parameter()
구조 내에서 mandatory
속성을 사용할 수 있습니다.
param(
[Parameter(Mandatory)]
[string]$Param1,
[Parameter()]
[string]$Param2,
[Parameter()]
[switch]$DisplayParam2
)
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
Write-Host "Param2 value is $Param2"
}
출력:
매개변수 유효성 검사
마지막으로, 매개변수에 제공된 값이 올바른지 다시 확인하십시오. 이는 누군가 매개변수에 고유한 값을 제공할 가능성을 최소화하는 데 이상적입니다. 따라서 아래와 같이 ‘ValidateSet()‘을 사용하여 원하는 입력을 지정할 수 있습니다.
param(
[Parameter(Mandatory)]
[ValidateSet('x', 'y')]
[string]$Param1,
[Parameter()]
[string]$Param2,
[Parameter()]
[switch]$DisplayParam2
)
Write-Host "Param1 value is $Param1"
if ($DisplayParam2.IsPresent) {
Write-Host "Param2 value is $Param2"
}
만약 param1에 x와 y 외의 값을 주면 오류가 발생할 것입니다.
명명된 매개변수 구문을 가진 고급 함수
Cmdletbinding 속성이 함수에 추가되면 이 함수는 고급 함수로 변환됩니다. 고급 함수가 구성될 때 다른 일반 인수가 사용됩니다. 구문은 다음과 같습니다.
function testfunction {
[CmdletBinding (DefaultParameterSetName = 'Param1')]
Param
(
[Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'Param1')]
[string] Param1,
[Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'Param2')]
[string] Param2,
)
}
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.