about_Functions_Advanced_Methods
Descrição breve
Descreve como as funções que especificam o CmdletBinding
atributo podem usar os métodos e propriedades disponíveis para cmdlets compilados.
Descrição longa
As funções que especificam o CmdletBinding
atributo podem acessar métodos e propriedades adicionais por meio da $PSCmdlet
variável. Esses métodos incluem os seguintes métodos:
- Os mesmos métodos de processamento de entrada disponíveis para todas as funções.
- Os
ShouldProcess
métodos eShouldContinue
que são usados para obter comentários do usuário antes que uma ação seja executada. - O
ThrowTerminatingError
método para gerar registros de erro. - Vários
Write
métodos que 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 begin
blocos , process
, e end
da função. O PowerShell 7.3 adiciona um método de clean
processo de bloco.
Você não é obrigado a usar nenhum desses blocos em suas funções. Se você não usar um bloco nomeado, o PowerShell colocará o end
código no bloco da função. No entanto, se você usar qualquer um desses blocos nomeados ou definir um dynamicparam
bloco, 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 begin
bloco para pré-processamento único, um process
bloco para processamento de vários registros e um end
bloco para pós-processamento único.
Function Test-ScriptCmdlet
{
[CmdletBinding(SupportsShouldProcess=$True)]
Param ($Parameter1)
begin{}
process{}
end{}
}
Observação
Esses blocos se aplicam a todas as funções, não apenas às funções que usam o CmdletBinding
atributo.
begin
Este bloco é usado para fornecer pré-processamento único opcional para a função. O tempo de execução do PowerShell usa o código nesse 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 process
bloco sem definir os outros blocos. O número de execuções de bloco depende de process
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 process
bloco . A $input
variável automática contém um enumerador que só está disponível para funções e blocos de script.
Para obter mais informações, confira about_Automatic_Variables.
- Chamar a função no início, ou fora de um pipeline, executa o
process
bloco uma vez. - Dentro de um pipeline, o
process
bloco é 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
process
bloco não será executado.- Os
begin
blocos ,end
eclean
ainda são executados.
- Os
Importante
Se um parâmetro de função estiver definido para aceitar entrada de pipeline e um process
bloco não estiver definido, o processamento de registro por registro falhará. Nesse caso, sua função será executada apenas uma vez, independentemente da entrada.
Quando você cria uma função que aceita entrada de pipeline e usa CmdletBinding
, o process
bloco 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
Este bloco é usado para fornecer pós-processamento único opcional para a função.
clean
O clean
bloco foi adicionado no PowerShell 7.3.
O bloco clean
é uma forma conveniente para os usuários limparem os recursos que abrangem os blocos begin
, process
e end
. Ele é semanticamente semelhante a um bloco 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 termina normalmente sem erro de encerramento
- quando a execução do pipeline é interrompida devido a um erro de encerramento
- quando o pipeline é interrompido por
Select-Object -First
- quando o pipeline está sendo interrompido por Ctrl+C ou
StopProcessing()
Cuidado
Adicionar o bloco clean
é uma alteração interruptiva. Como o clean
é analisado como uma palavra-chave, ele impede que os usuários chamem diretamente um comando chamado clean
como a primeira instrução em um bloco de script. 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 booleano retornado pelo método. Esse método só pode ser chamado de dentro do Process{}
bloco da função. O CmdletBinding
atributo também deve declarar que a função oferece suporte ShouldProcess
(como 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 Solicitando confirmação.
ShouldContinue
Esse método é chamado para solicitar uma segunda mensagem de confirmação. Ele deve ser chamado quando o ShouldProcess
método 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 WriteError
método, que é descrito na Write
seção métodos. Quando ocorre um erro de encerramento e a função não pode continuar, ela deve chamar o ThrowTerminatingError
método. Você também pode usar a Throw
instrução para encerrar erros e o cmdlet Write-Error para erros não terminantes.
Para obter mais informações, consulte System.Management.Automation.Cmdlet.ThrowTerminatingError.
Métodos de gravação
Uma função pode chamar os seguintes métodos 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 Write
cmdlets, como Write-Error
.
WriteCommandDetail
Para obter informações sobre o WriteCommandDetails
método, consulte System.Management.Automation.Cmdlet.WriteCommandDetail.
WriteDebug
Para fornecer informações que podem ser usadas para solucionar problemas de uma função, faça a função chamar o WriteDebug
método. O WriteDebug
método exibe mensagens de depuração para o usuário. Para obter mais informações, consulte System.Management.Automation.Cmdlet.WriteDebug.
Erro de gravação
As funções devem chamar esse método quando ocorrerem erros de não encerramento e a função for projetada para continuar processando registros. Para obter mais informações, consulte System.Management.Automation.Cmdlet.WriteError.
Observação
Se ocorrer um erro de encerramento, a função deverá chamar o método ThrowTerminatingError .
WriteObject
O WriteObject
método 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 para que as WriteProgress
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 a função chamar o WriteVerbose
método 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 a função chamar 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.
Observação
Você também pode exibir mensagens de aviso configurando a $WarningPreference
variável ou usando as Verbose
opções de linha de comando e Debug
. Para obter mais informações sobre a variável, consulte about_Preference_Variables$WarningPreference
.
Outros métodos e propriedades
Para obter informações sobre os outros métodos e propriedades que podem ser acessados por meio da $PSCmdlet
variável, 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.
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de