Como usar o atributo CmdletBinding no PowerShell
-
Atributo
CmdletBinding
no PowerShell -
Use o Atributo
CmdletBinding
Com o ParâmetroVerbose
-
Use o Atributo
CmdletBinding
Com o Objeto$PSCmdlet
eSupportsShouldProcess
-
Use o Atributo
CmdletBinding
Com o AtributoParameter
Para Controlar Parâmetros da Função

O cmdlet
é um script leve que executa uma única função dentro do ambiente PowerShell. Os cmdlets
podem ser escritos em qualquer linguagem .Net
.
Geralmente, um cmdlet
é expresso como um par verbo-substantivo para executar um comando. O comando é uma ordem para o sistema operacional subjacente realizar um serviço específico pelo usuário final.
O ambiente PowerShell inclui mais de 200 cmdlets
básicos, como New-Item
, Move-Item
, Set-Location
e Get-Location
. O cmdlet
compartilha um conjunto comum de recursos não disponíveis em funções simples do PowerShell.
- Suporta parâmetros comuns, como
-WhatIf
,ErrorAction
,Verbose
, etc. - Solicita confirmações
- Suporte a parâmetros obrigatórios
Atributo CmdletBinding
no PowerShell
A simples função PowerShell pode ser escrita como uma função avançada herdando os recursos básicos de cmdlet
discutidos acima. O atributo CmdletBinding
permite que você acesse esses recursos básicos de cmdlet
.
A seguir, mostra a sintaxe do atributo CmdletBinding
com todos os argumentos possíveis.
{
[CmdletBinding(ConfirmImpact = <String>,
DefaultParameterSetName = <String>,
HelpURI = <URI>,
SupportsPaging = <Boolean>,
SupportsShouldProcess = <Boolean>,
PositionalBinding = <Boolean>)]
Param ($myparam)
Begin {}
Process {}
End {}
}
Vamos supor que temos uma função simples do PowerShell chamada Helloworld-To-UpperCase
.
Function Helloworld-To-UpperCase {
"helloworld".ToUpper();
}
Não há parâmetros anexados a essa função. Portanto, isso é chamado de uma função simples do PowerShell.
Mas podemos usar o atributo CmdletBinding
para converter essa função em uma avançada e acessar os recursos e parâmetros básicos de cmdlet
, como mostrado a seguir.
Function Helloworld-To-UpperCase {
[CmdletBinding()]Param()
"helloworld".ToUpper();
}
Quando chamamos a função acima com o parâmetro -verbose
, ele imprimirá todas as strings Write-Verbose
na janela do PowerShell.
HelloWorld-To-UpperCase -Verbose
Saída:
Use o Atributo CmdletBinding
Com o Objeto $PSCmdlet
e SupportsShouldProcess
Como usamos o atributo CmdletBinding
, nossa função avançada pode acessar o objeto $PSCmdlet
sem problemas. Este objeto contém vários métodos, como ShouldContinue
, ShouldProcess
, ToString
, WriteDebug
, etc.
Use o Atributo CmdletBinding
Com o Método ShouldContinue
Este método permite que os usuários lidem com solicitações de confirmação. Nesse meio tempo, é obrigatório definir o argumento SupportsShouldProcess
como $True
.
O método ShouldContinue
possui vários métodos sobrecarregados, e usaremos o que tem dois parâmetros.
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."
}
}
Podemos chamar a função com o parâmetro -Confirm
, e ele exibirá uma caixa de confirmação, como mostrado a seguir.
HelloWorld-To-UpperCase -Confirm
Saída:
Se o usuário clicar em Sim
, deve implementar o método no bloco if
e imprimir a string helloworld
em letras maiúsculas.
Caso contrário, deverá mostrar a mensagem helloworld mantido em minúsculas
.
Use o Atributo CmdletBinding
Com o Atributo Parameter
Para Controlar Parâmetros da Função
Vamos fazer nossa função avançada aceitar um parâmetro como uma string.
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."
}
}
Mudamos a função Helloworld-To-UpperCase
para aceitar um parâmetro do tipo string chamado $word
. Quando a função é chamada, precisamos fornecer uma string como argumento.
O texto fornecido será convertido para letras maiúsculas. Se o usuário não forneceu nenhum argumento de texto, a função retornará uma saída vazia.
Podemos controlar isso tornando o parâmetro $word
obrigatório e dando à posição do parâmetro 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."
}
}
Adicionamos algumas flags para controlar o comportamento do parâmetro $word
. Como é obrigatório, precisamos fornecer um valor de string quando a função for executada.
HelloWorld-To-UpperCase -Confirm "stringtouppercase"
O PowerShell continua perguntando por isso se não fornecermos o argumento de texto.
Você pode usar várias flags para controlar os parâmetros em suas funções, como mostrado na seguinte sintaxe do atributo 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.