파워셸 함수 매개변수

  1. PowerShell 함수 매개변수 정의
  2. PowerShell 함수의 명명된 매개변수
  3. PowerShell 함수의 위치 기반 매개변수
  4. PowerShell 함수에서 스위치 매개변수
  5. PowerShell 함수 매개변수에서 스플래팅
  6. PowerShell 매개변수 속성
  7. 명명된 매개변수 구문을 가진 고급 함수
파워셸 함수 매개변수

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'

출력:

이미지-20211223173801745

이 스크립트를 실행하면 각 인수 변수가 런타임에 제공된 값으로 대체된 내용을 볼 수 있습니다.

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,
    )
}
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.