PowerShell에서 CmdletBinding 특성 사용
-
PowerShell의
CmdletBinding
특성 -
Verbose
매개변수와 함께CmdletBinding
특성 사용 -
$PSCmdlet
개체 및SupportsShouldProcess
와 함께CmdletBinding
특성 사용 -
Parameter
특성과 함께CmdletBinding
특성을 사용하여 함수 매개변수 제어
cmdlet
은 PowerShell 환경 내에서 단일 기능을 수행하는 경량 스크립트입니다. cmdlet
은 .Net
언어로 작성할 수 있습니다.
일반적으로 cmdlet
은 명령을 실행하기 위해 동사-명사 쌍으로 표현됩니다. 이 명령은 최종 사용자가 특정 서비스를 수행하도록 기본 운영 체제에 명령하는 것입니다.
PowerShell 환경에는 New-Item
, Move-Item
, Set-Location
및 Get-Location
과 같은 200개 이상의 기본 cmdlet
이 포함되어 있습니다. cmdlet
은 간단한 PowerShell 기능에서 사용할 수 없는 공통 기능 세트를 공유합니다.
-WhatIf
,ErrorAction
,Verbose
등과 같은 공통 매개변수를 지원합니다.- 확인 프롬프트
- 필수 매개변수 지원
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
매개변수 및 기능을 고급 기능 내에서 사용하여 기능을 확장할 수 있습니다.
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
출력:
$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
출력:
사용자가 예
를 클릭하면 if
블록에 메서드를 구현하고 helloworld
문자열을 대문자로 인쇄해야 합니다.
그렇지 않은 경우 helloworld kept in lowercase
메시지가 표시되어야 합니다.
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 인수를 제공하지 않으면 계속해서 요청합니다.
다음 Parameter
속성 구문에 표시된 것처럼 여러 플래그를 사용하여 함수의 매개변수를 제어할 수 있습니다.
Param
(
[Parameter(
Mandatory=<Boolean>,
Position=<Integer>,
ParameterSetName=<String>,
ValueFromPipeline=<Boolean>,
ValueFromPipelineByPropertyName=<Boolean>,
ValueFromRemainingArguments=<Boolean>,
HelpMessage=<String>,
)]
[string[]]
$Parameter1
)
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.