Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Descreve como as funções que especificam o atributo CmdletBinding podem usar os métodos e as propriedades disponíveis para cmdlets compilados.
Descrição longa
As funções que especificam o atributo CmdletBinding podem acessar métodos e propriedades adicionais por meio da variável $PSCmdlet. Esses métodos incluem os seguintes métodos:
- Os mesmos métodos de processamento de entrada disponíveis para todas as funções.
- Os métodos
ShouldProcesseShouldContinueque são usados para obter comentários do usuário antes que uma ação seja executada. - O método
ThrowTerminatingErrorpara gerar registros de erro. - Vários métodos de
Writeque retornam diferentes tipos de saída.
Todos os métodos e propriedades da classe PSCmdlet estão disponíveis para funções avançadas. Para obter mais informações, consulte System.Management.Automation.PSCmdlet .
Para obter mais informações sobre o atributo CmdletBinding, consulte about_Functions_CmdletBindingAttribute. Para a classe CmdletBindingAttribute, consulte System.Management.Automation.Cmdlet.CmdletBindingAttribute.
Métodos de processamento de entrada
Os métodos descritos nesta seção são chamados de métodos de processamento de entrada. Para funções, esses três métodos são representados pelos blocos begin, processe end da função. O PowerShell 7.3 adiciona um método de processo de bloco clean.
Você não precisa usar nenhum desses blocos em suas funções. Se você não usar um bloco nomeado, o PowerShell colocará o código no bloco end da função. No entanto, se você usar qualquer um desses blocos nomeados ou definir um bloco dynamicparam, deverá colocar todo o código em um bloco nomeado.
O exemplo a seguir mostra a estrutura de tópicos de uma função que contém um bloco begin para pré-processamento único, um bloco de process para processamento de vários registros e um bloco end para pós-processamento único.
Function Test-ScriptCmdlet
{
[CmdletBinding(SupportsShouldProcess=$true)]
param ($Parameter1)
begin{}
process{}
end{}
clean{}
}
Nota
Esses blocos se aplicam a todas as funções, não apenas às funções que usam o atributo CmdletBinding.
begin
Esse bloco é usado para fornecer pré-processamento único opcional para a função. O runtime do PowerShell usa o código neste bloco uma vez para cada instância da função no pipeline.
process
Esse bloco é usado para fornecer processamento de registro por registro para a função. Você pode usar um bloco de process sem definir os outros blocos. O número de execuções de bloco process depende de como você usa a função e qual entrada a função recebe.
A variável automática $_ ou $PSItem contém o objeto atual no pipeline para uso no bloco process. A $input variável automática contém um enumerador que só está disponível para funções e scriptblocks.
Para obter mais informações, consulte about_Automatic_Variables.
- Chamar a função no início ou fora de um pipeline executa o bloco
processuma vez. - Em um pipeline, o bloco
processé executado uma vez para cada objeto de entrada que atinge a função. - Se a entrada de pipeline que atinge a função estiver vazia, o bloco
processnão executado.- Os blocos
begin,endecleanainda são executados.
- Os blocos
Importante
Se um parâmetro de função for definido para aceitar a entrada do pipeline e um bloco de process não for definido, o processamento registro por registro falhará. Nesse caso, sua função só será executada uma vez, independentemente da entrada.
Quando você cria uma função que aceita entrada de pipeline e usa CmdletBinding, o bloco process deve usar a variável de parâmetro definida para entrada de pipeline em vez de $_ ou $PSItem. Por exemplo:
function Get-SumOfNumbers {
[CmdletBinding()]
param (
[Parameter(Mandatory, Position=0, ValueFromPipeline)]
[int[]]$Numbers
)
begin { $retValue = 0 }
process {
foreach ($n in $Numbers) {
$retValue += $n
}
}
end { $retValue }
}
PS> Get-SumOfNumbers 1, 2, 3, 4
10
PS> 1,2,3,4 | Get-SumOfNumbers
10
end
Esse bloco é usado para fornecer pós-processamento único opcional para a função.
clean
O bloco clean foi adicionado no PowerShell 7.3.
O bloco clean é uma maneira conveniente para os usuários limparem os recursos que se estendem pelos blocos begin, processe end. É semanticamente semelhante a um bloco de finally que abrange todos os outros blocos nomeados de uma função de script ou um cmdlet de script. A limpeza de recursos é imposta para os seguintes cenários:
- quando a execução do pipeline é concluída normalmente sem encerrar o erro
- quando a execução do pipeline é interrompida devido ao erro de encerramento
- quando o pipeline é interrompido por
Select-Object -First - quando o pipeline está sendo interrompido por ctrl+c ou
StopProcessing()
O bloco limpo descarta qualquer saída gravada no fluxo de de sucesso do.
Cuidado
Adicionar o bloco clean é uma alteração significativa. Como clean é analisada como uma palavra-chave, ela impede que os usuários chamem diretamente um comando nomeado clean como a primeira instrução em um scriptblock. No entanto, não é provável que seja um problema. O comando ainda pode ser invocado usando o operador de chamada (& clean).
Métodos de confirmação
ShouldProcess
Esse método é chamado para solicitar confirmação do usuário antes que a função execute uma ação que alteraria o sistema. A função pode continuar com base no valor booliano retornado pelo método. Esse método só pode ser chamado de dentro do bloco process {} da função. O atributo CmdletBinding também deve declarar que a função dá suporte a ShouldProcess (conforme mostrado no exemplo anterior).
Para obter mais informações sobre esse método, consulte System.Management.Automation.Cmdlet.ShouldProcess.
Para obter mais informações sobre como solicitar confirmação, consulte Solicitandode Confirmação.
ShouldContinue
Esse método é chamado para solicitar uma segunda mensagem de confirmação. Ele deve ser chamado quando o método ShouldProcess retorna $true. Para obter mais informações sobre esse método, consulte System.Management.Automation.Cmdlet.ShouldContinue.
Métodos de erro
As funções podem chamar dois métodos diferentes quando ocorrem erros. Quando ocorre um erro de não encerramento, a função deve chamar o método WriteError, que é descrito na seção métodos Write. Quando ocorre um erro de encerramento e a função não pode continuar, ela deve chamar o método ThrowTerminatingError. Você também pode usar a instrução throw para encerrar erros e o cmdlet write-error para erros de não terminação.
Para obter mais informações, consulte System.Management.Automation.Cmdlet.ThrowTerminatingError.
Métodos de gravação
Uma função pode chamar os métodos a seguir para retornar diferentes tipos de saída.
Observe que nem toda a saída vai para o próximo comando no pipeline. Você também pode usar os vários cmdlets Write, como Write-Error.
WriteCommandDetail
Para obter informações sobre o método WriteCommandDetails, consulte System.Management.Automation.Cmdlet.WriteCommandDetail.
WriteDebug
Para fornecer informações que possam ser usadas para solucionar problemas de uma função, faça com que a função chame o método WriteDebug. O método WriteDebug exibe mensagens de depuração para o usuário. Para obter mais informações, consulte System.Management.Automation.Cmdlet.WriteDebug.
WriteError
As funções devem chamar esse método quando ocorrerem erros de não terminação e a função for projetada para continuar processando registros. Para obter mais informações, consulte System.Management.Automation.Cmdlet.WriteError.
WriteObject
O método WriteObject permite que a função envie um objeto para o próximo comando no pipeline. Na maioria dos casos, WriteObject é o método a ser usado quando a função retorna dados. Para obter mais informações, consulte System.Management.Automation.PSCmdlet.WriteObject.
WriteProgress
Para funções com ações que levam muito tempo para serem concluídas, esse método permite que a função chame o método WriteProgress para que as informações de progresso sejam exibidas. Por exemplo, você pode exibir a porcentagem concluída.
Para obter mais informações, consulte System.Management.Automation.PSCmdlet.WriteProgress.
WriteVerbose
Para fornecer informações detalhadas sobre o que a função está fazendo, faça com que a função chame o método WriteVerbose para exibir mensagens detalhadas para o usuário. Por padrão, mensagens detalhadas não são exibidas. Para obter mais informações, consulte System.Management.Automation.PSCmdlet.WriteVerbose.
WriteWarning
Para fornecer informações sobre condições que podem causar resultados inesperados, faça com que a função chame o método WriteWarning para exibir mensagens de aviso para o usuário. Por padrão, as mensagens de aviso são exibidas. Para obter mais informações, consulte System.Management.Automation.PSCmdlet.WriteWarning.
Nota
Você também pode exibir mensagens de aviso configurando a variável $WarningPreference ou usando as opções de linha de comando Verbose e Debug. para obter mais informações sobre a variável $WarningPreference, consulte about_Preference_Variables.
Outros métodos e propriedades
Para obter informações sobre os outros métodos e propriedades que podem ser acessados por meio da variável $PSCmdlet, consulte System.Management.Automation.PSCmdlet.
Por exemplo, a propriedade ParameterSetName permite que você veja o conjunto de parâmetros que está sendo usado. Os conjuntos de parâmetros permitem criar uma função que executa tarefas diferentes com base nos parâmetros especificados quando a função é executada.