Partilhar via


Requesting Confirmation from Cmdlets (Pedir Confirmação a Partir de Cmdlets)

Os cmdlets devem solicitar a confirmação quando estão prestes a fazer uma alteração no sistema que está fora do ambiente Windows PowerShell. Por exemplo, se um cmdlet estiver prestes a adicionar uma conta de utilizador ou parar um processo, o cmdlet deve exigir a confirmação do utilizador antes de prosseguir. Em contrapartida, se um cmdlet estiver prestes a alterar uma variável Windows PowerShell, o cmdlet não necessita de requerer confirmação.

Para fazer um pedido de confirmação, o cmdlet deve indicar que suporta pedidos de confirmação, e deve ligar para o Sistema.Management.Automation.Cmdlet.ShouldProcess and System.Management.Automation.Cmdlet.ShouldContinue (opcional) métodos para exibir uma mensagem de pedido de confirmação.

Solicitações de Confirmação de Apoio

Para apoiar os pedidos de confirmação, o cmdlet deve definir o SupportsShouldProcess parâmetro do atributo Cmdlet a true . Isto permite os Confirm parâmetros e WhatIf cmdlet fornecidos por Windows PowerShell. O Confirm parâmetro permite ao utilizador controlar se o pedido de confirmação é apresentado. O WhatIf parâmetro permite ao utilizador determinar se o cmdlet deve exibir uma mensagem ou realizar a sua ação. Não adicione manualmente os Confirm parâmetros e WhatIf os parâmetros a um cmdlet.

O exemplo a seguir mostra uma declaração de atributo Cmdlet que suporta pedidos de confirmação.

[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
        SupportsShouldProcess = true)]

Chamando os métodos de pedido de confirmação

No código cmdlet, ligue para o método System.Management.Automation.Cmdlet.ShouldProcess antes da operação que altera o sistema. Desenhe o cmdlet de modo a que, se a chamada devolver um valor false de, a operação não seja executada, e o cmdlet processe a operação seguinte.

Chamando o Método DeveContinue

A maioria dos cmdlets solicitam confirmação usando apenas o método System.Management.Automation.Cmdlet.ShouldProcess. No entanto, alguns casos podem requerer confirmação adicional. Para estes casos, complemente o método System.Management.Automation.Cmdlet.ShouldProcessar com uma chamada para o método System.Management.Automation.Cmdlet.ShouldContinue. Isto permite ao cmdlet ou fornecedor controlar mais finamente o âmbito do Sim a toda a resposta à solicitação de confirmação.

Se um cmdlet chamar o sistema.Management.Automation.Cmdlet.ShouldContinue, o cmdlet também deve fornecer um Force parâmetro de comutação. Se o utilizador especificar Force quando o utilizador invoca o cmdlet, o cmdlet deve ainda ligar para o System.Management.Automation.Cmdlet.ShouldProcess,mas deve contornar a chamada para System.Management.Automation.Cmdlet.ShouldContinue.

System.Management.Automation.Cmdlet.ShouldContinue a lançar uma exceção quando é chamado de um ambiente não interativo onde o utilizador não pode ser solicitado. A adição de um Force parâmetro garante que o comando ainda pode ser realizado quando é invocado num ambiente não interativo.

O exemplo a seguir mostra como ligar para o System.Management.Automation.Cmdlet.ShouldProcess and System.Management.Automation.Cmdlet.ShouldContinue.

if (ShouldProcess (...) )
{
  if (Force || ShouldContinue(...))
  {
     // Add code that performs the operation.
  }
}

O comportamento de um System.Management.Automation.Cmdlet.ShouldProcess call pode variar dependendo do ambiente em que o cmdlet é invocado. A utilização das diretrizes anteriores ajudará a garantir que o cmdlet se comporta de forma consistente com outros cmdlets, independentemente do ambiente de acolhimento.

Para um exemplo de chamada para o método System.Management.Automation.Cmdlet.ShouldProcess, consulte como solicitar confirmações.

Especificar o Nível de Impacto

Quando criar o cmdlet, especifique o nível de impacto (a gravidade) da alteração. Para tal, desa estale o valor ConfirmImpact do parâmetro do atributo Cmdlet para Alto, Médio ou Baixo. Pode especificar um valor ConfirmImpact apenas quando também especificar o SupportsShouldProcess parâmetro para o cmdlet.

Para a maioria dos cmdlets, não tem de especificar explicitamente ConfirmImpact . Em vez disso, utilize a definição padrão do parâmetro, que é Medium. Se definir ConfirmImpact para High, a operação será confirmada por defeito. Reserve esta definição para ações altamente disruptivas, tais como reformatar um volume de disco rígido.

Chamando métodos de não confirmação

Se o cmdlet ou o fornecedor mensagem mensagem, mas não solicitar a confirmação, pode ligar para os três métodos seguintes. Evite utilizar o método System.Management.Automation.Cmdlet.WriteObject para enviar mensagens deste tipo porque System.Management.Automation.Cmdlet.WriteObject é intercalada com a saída normal do seu cmdlet ou fornecedor, o que dificulta a escrita de scripts.

Os comandantes e fornecedores ligam primeiro para os seguintes métodos para solicitar a confirmação antes de tentarem realizar uma operação que altera um sistema fora do Windows PowerShell:

Fazem-no chamando o método System.Management.Automation.Cmdlet.Should Processprocess, o que leva o utilizador a confirmar a operação com base na forma como o utilizador invocou o comando.

Consulte também

Writing a Windows PowerShell Cmdlet (Escrever um Cmdlet do Windows PowerShell)