about_Functions_Advanced_Methods

Breve descrição

Descreve como as funções que especificam o CmdletBinding atributo podem usar os métodos e as 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 e ShouldContinue 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 CmdletBinding atributo, 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 pelo begin, processe end blocos 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 código no end bloco da função. No entanto, se você usar qualquer um desses blocos nomeados, ou definir um dynamicparam bloco, você deve colocar todo o código em um bloco nomeado.

O exemplo a seguir mostra o contorno 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{}
}

Nota

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 neste bloco uma vez para cada instância da função no pipeline.

process

Este bloco é usado para fornecer processamento registro a registro para a função. Você pode usar um process bloco sem definir os outros blocos. O número de execuções em 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, consulte 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 do pipeline que atinge a função estiver vazia, o process bloco não será executado.
    • Os beginblocos , end, e clean ainda são executados.

Importante

Se um parâmetro de função for definido para aceitar a entrada do pipeline e um process bloco não estiver definido, o processamento registro a registro falhará. Neste caso, a 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 process bloco deve usar a variável de parâmetro que você definiu 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 clean bloco é uma maneira conveniente para os usuários limparem recursos que abrangem o begin, processe end blocos. É semanticamente semelhante a um finally bloco que abrange todos os outros blocos nomeados de uma função de script ou de um cmdlet de script. A limpeza de recursos é imposta para os seguintes cenários:

  1. quando a execução do pipeline termina normalmente sem erro de encerramento
  2. quando a execução do pipeline é interrompida devido a um erro de encerramento
  3. quando o gasoduto é interrompido por Select-Object -First
  4. quando o pipeline está sendo interrompido por Ctrl+c ou StopProcessing()

Atenção

Adicionar o clean bloco é uma mudança de rutura. Como clean é analisado como uma palavra-chave, ele impede que os usuários chamem diretamente um comando nomeado 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

DeveProcessar

Este método é chamado para solicitar a 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. Este 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 suporta 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.

DeveContinuar

Este 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 terminação, a função deve chamar o WriteError método, que é descrito na Write seção de métodos. Quando ocorre um erro de encerramento e a função não pode continuar, ele deve chamar o ThrowTerminatingError método. Você também pode usar a Throw instrução para erros de encerramento e o cmdlet Write-Error para erros não terminativos.

Para obter mais informações, consulte System.Management.Automation.Cmdlet.ThrowTerminatingError.

Métodos de escrita

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 com que a função chame 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.

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.

Nota

Se ocorrer um erro de encerramento, a função deve 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.

EscreverVerbose

Para fornecer informações detalhadas sobre o que a função está fazendo, faça com que a função chame 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.

Nota

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 $WarningPreference variável, 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 $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.

Consulte também