PowerShell에서 CmdletBinding 특성 사용

Migel Hewage Nimesha 2024년2월15일
  1. PowerShell의 CmdletBinding 특성
  2. Verbose 매개변수와 함께 CmdletBinding 특성 사용
  3. $PSCmdlet 개체 및 SupportsShouldProcess와 함께 CmdletBinding 특성 사용
  4. Parameter 특성과 함께 CmdletBinding 특성을 사용하여 함수 매개변수 제어
PowerShell에서 CmdletBinding 특성 사용

cmdlet은 PowerShell 환경 내에서 단일 기능을 수행하는 경량 스크립트입니다. cmdlet.Net 언어로 작성할 수 있습니다.

일반적으로 cmdlet은 명령을 실행하기 위해 동사-명사 쌍으로 표현됩니다. 이 명령은 최종 사용자가 특정 서비스를 수행하도록 기본 운영 체제에 명령하는 것입니다.

PowerShell 환경에는 New-Item, Move-Item, Set-LocationGet-Location과 같은 200개 이상의 기본 cmdlet이 포함되어 있습니다. cmdlet은 간단한 PowerShell 기능에서 사용할 수 없는 공통 기능 세트를 공유합니다.

  1. -WhatIf, ErrorAction, Verbose 등과 같은 공통 매개변수를 지원합니다.
  2. 확인 프롬프트
  3. 필수 매개변수 지원

PowerShell의 CmdletBinding 특성

간단한 PowerShell 기능은 위에서 논의한 기본 cmdlet 기능을 상속하여 고급 기능으로 작성할 수 있습니다. CmdletBinding 속성을 사용하면 이러한 기본 cmdlet 기능에 액세스할 수 있습니다.

다음은 가능한 모든 인수가 포함된 CmdletBinding 특성 구문을 보여줍니다.

{
    [CmdletBinding(ConfirmImpact=<String>,
    DefaultParameterSetName=<String>,
    HelpURI=<URI>,
    SupportsPaging=<Boolean>,
    SupportsShouldProcess=<Boolean>,
    PositionalBinding=<Boolean>)]

    Param ($myparam)
    Begin{}
    Process{}
    End{}
}

Helloworld-To-UpperCase라는 간단한 PowerShell 함수가 있다고 가정해 보겠습니다.

Function Helloworld-To-UpperCase {
    "helloworld".ToUpper();
}

이 함수에 연결된 매개변수가 없습니다. 그래서 이것을 단순 PowerShell 함수라고 합니다.

그러나 다음과 같이 CmdletBinding 속성을 사용하여 이 기능을 고급 기능으로 변환하고 기본 cmdlet 기능 및 매개변수에 액세스할 수 있습니다.

Function Helloworld-To-UpperCase {
    [CmdletBinding()]Param()
    "helloworld".ToUpper();
}

Helloworld-To-UpperCase 기능은 모든 기본 cmdlet 기능을 상속하는 고급 기능으로 변환되었습니다. 기본 cmdlet 매개변수를 이 기능에 사용할 수 있습니다.

PowerShell 창에서 -를 사용하여 이 함수를 호출하면 cmdlet에서 오는 모든 공통 매개변수가 나열되어야 합니다.

helloworld-to-uppercase -

출력:

cmdlet 매개변수

일반적인 cmdlet 매개변수 및 기능을 고급 기능 내에서 사용하여 기능을 확장할 수 있습니다.

Verbose 매개변수와 함께 CmdletBinding 특성 사용

-verbose는 고급 기능이 실행될 때 메시지를 표시할 수 있는 귀중한 공통 매개변수 중 하나입니다.

Function Helloworld-To-UpperCase {
    [CmdletBinding()]Param()

    Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"

    "helloworld".ToUpper();
}

-verbose 매개변수를 사용하여 위의 함수를 호출하면 모든 Write-Verbose 문자열을 PowerShell 창에 인쇄합니다.

HelloWorld-To-UpperCase -Verbose

출력:

자세한 매개변수가 있는 CmdletBinding

$PSCmdlet 개체 및 SupportsShouldProcess와 함께 CmdletBinding 특성 사용

CmdletBinding 속성을 사용했기 때문에 고급 기능은 번거로움 없이 $PSCmdlet 개체에 액세스할 수 있습니다. 이 개체에는 ShouldContinue, ShouldProcess, ToString, WriteDebug 등과 같은 여러 메서드가 포함되어 있습니다.

ShouldContinue 메서드와 함께 CmdletBinding 특성 사용

이 방법을 사용하면 사용자가 확인 요청을 처리할 수 있습니다. 그 동안 SupportsShouldProcess 인수를 $True로 설정해야 합니다.

ShouldContinue 메소드에는 여러 오버로드된 메소드가 있으며 두 개의 매개변수가 있는 메소드를 사용합니다.

Function Helloworld-To-UpperCase {
    [CmdletBinding(SupportsShouldProcess=$True)]Param()

    Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"

    if ($PSCmdlet.ShouldContinue("Are you sure on making the helloworld all caps?", "Making uppercase with ToUpper")) {
        "helloworld".ToUpper();
    } Else {
        "helloworld kept in lowercase."
    }
}

-Confirm 매개변수를 사용하여 함수를 호출할 수 있으며 다음과 같이 확인 상자가 표시됩니다.

HelloWorld-To-UpperCase -Confirm

출력:

ShouldContinue 메서드 1이 있는 CmdletBinding

사용자가 를 클릭하면 if 블록에 메서드를 구현하고 helloworld 문자열을 대문자로 인쇄해야 합니다.

ShouldContinue 메서드 2가 있는 CmdletBinding

그렇지 않은 경우 helloworld kept in lowercase 메시지가 표시되어야 합니다.

ShouldContinue 메서드 3이 있는 CmdletBinding

Parameter 특성과 함께 CmdletBinding 특성을 사용하여 함수 매개변수 제어

고급 함수가 하나의 매개변수를 문자열로 사용하도록 합시다.

Function Helloworld-To-UpperCase {
    [CmdletBinding(SupportsShouldProcess=$True)]
    Param([string]$word)

    Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"

    if ($PSCmdlet.ShouldContinue("Are you sure on making the helloworld all caps?", "Making uppercase with ToUpper")) {
        $word.ToUpper();
    } Else {
        "helloworld kept in lowercase."
    }
}

$word라는 하나의 문자열 유형 매개변수를 사용하도록 Helloworld-To-UpperCase 함수를 변경했습니다. 함수가 호출되면 문자열을 인수로 제공해야 합니다.

제공된 텍스트는 대문자로 변환됩니다. 사용자가 텍스트 인수를 제공하지 않은 경우 함수는 빈 출력을 제공합니다.

$word 매개변수를 필수 항목으로 만들고 매개변수 위치에 0을 지정하여 이를 제어할 수 있습니다.

Function Helloworld-To-UpperCase {
    [CmdletBinding(SupportsShouldProcess=$True)]
    Param(
    [Parameter(
        Mandatory=$True, Position=0
    ) ]
    [string]$word
    )

    #Verbose
    Write-Verbose "This is the common parameter usage -Version within our Helloworld-To-UpperCase function"

    #If/Else block for request processing
    if ($PSCmdlet.ShouldContinue("Are you sure on making the helloworld all caps?", "Making uppercase with ToUpper")) {
        $word.ToUpper();
    } Else {
        "helloworld kept in lowercase."
    }
}

$word 매개변수의 동작을 제어하기 위해 몇 가지 플래그를 추가했습니다. 필수이므로 함수가 실행될 때 문자열 값을 제공해야 합니다.

HelloWorld-To-UpperCase -Confirm "stringtouppercase"

PowerShell은 text 인수를 제공하지 않으면 계속해서 요청합니다.

CmdletBinding 매개변수 속성

다음 Parameter 속성 구문에 표시된 것처럼 여러 플래그를 사용하여 함수의 매개변수를 제어할 수 있습니다.

 Param
(
    [Parameter(
        Mandatory=<Boolean>,
        Position=<Integer>,
        ParameterSetName=<String>,
        ValueFromPipeline=<Boolean>,
        ValueFromPipelineByPropertyName=<Boolean>,
        ValueFromRemainingArguments=<Boolean>,
        HelpMessage=<String>,
     )]
    [string[]]
    $Parameter1
)
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.