Solicitud de confirmación de los cmdlets

Los cmdlets deben solicitar confirmación cuando están a punto de realizar un cambio en el sistema que está fuera del Windows PowerShell de ejecución. Por ejemplo, si un cmdlet está a punto de agregar una cuenta de usuario o detener un proceso, el cmdlet debe requerir confirmación del usuario antes de continuar. Por el contrario, si un cmdlet está a punto de cambiar una variable Windows PowerShell, el cmdlet no necesita confirmación.

Para realizar una solicitud de confirmación, el cmdlet debe indicar que admite solicitudes de confirmación y debe llamar a los métodos System.Management.Automation.Cmdlet.ShouldProcess y System.Management.Automation.Cmdlet.ShouldContinue (opcional) para mostrar un mensaje de solicitud de confirmación.

Admitir solicitudes de confirmación

Para admitir solicitudes de confirmación, el cmdlet debe establecer SupportsShouldProcess el parámetro del atributo Cmdlet en true . Esto habilita los Confirm parámetros de cmdlet y WhatIf proporcionados por Windows PowerShell. El Confirm parámetro permite al usuario controlar si se muestra la solicitud de confirmación. El WhatIf parámetro permite al usuario determinar si el cmdlet debe mostrar un mensaje o realizar su acción. No agregue manualmente los parámetros Confirm y WhatIf a un cmdlet.

En el ejemplo siguiente se muestra una declaración de atributo cmdlet que admite solicitudes de confirmación.

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

Llamar a los métodos de solicitud de confirmación

En el código del cmdlet, llame al método System.Management.Automation.Cmdlet.ShouldProcess antes de que se realice la operación que cambia el sistema. Diseñe el cmdlet para que si la llamada devuelve un valor de , la operación no se realiza y el false cmdlet procesa la siguiente operación.

Llamar al método ShouldContinue

La mayoría de los cmdlets solicitan confirmación solo mediante el método System.Management.Automation.Cmdlet.ShouldProcess. Sin embargo, algunos casos pueden requerir confirmación adicional. En estos casos, complemente la llamada a System.Management.Automation.Cmdlet.ShouldProcess con una llamada al método System.Management.Automation.Cmdlet.ShouldContinue. Esto permite que el cmdlet o el proveedor controle de forma más fina el ámbito de la respuesta Sí a toda la respuesta al símbolo del sistema de confirmación.

Si un cmdlet llama al método System.Management.Automation.Cmdlet.ShouldContinue, el cmdlet también debe proporcionar un Force parámetro switch. Si el usuario especifica cuándo el usuario invoca el cmdlet, el cmdlet todavía debe llamar a Force System.Management.Automation.Cmdlet.ShouldProcess, pero debe omitir la llamada a System.Management.Automation.Cmdlet.ShouldContinue.

System.Management.Automation.Cmdlet.ShouldContinue producirá una excepción cuando se llame desde un entorno no interactivo en el que no se pueda solicitar al usuario. Agregar un parámetro garantiza que el comando se puede seguir Force realizando cuando se invoca en un entorno no interactivo.

En el ejemplo siguiente se muestra cómo llamar a System.Management.Automation.Cmdlet.ShouldProcess y System.Management.Automation.Cmdlet.ShouldContinue.

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

El comportamiento de una llamada a System.Management.Automation.Cmdlet.ShouldProcess puede variar en función del entorno en el que se invoque el cmdlet. El uso de las instrucciones anteriores le ayudará a garantizar que el cmdlet se comporta de forma coherente con otros cmdlets, independientemente del entorno de host.

Para obtener un ejemplo de cómo llamar al método System.Management.Automation.Cmdlet.ShouldProcess, vea Cómo solicitar confirmaciones.

Especificar el nivel de impacto

Al crear el cmdlet, especifique el nivel de impacto (la gravedad) del cambio. Para ello, establezca el valor del parámetro del atributo ConfirmImpact Cmdlet en Alto, Medio o Bajo. Solo puede especificar un valor ConfirmImpact para cuando también especifique el parámetro para el cmdlet SupportsShouldProcess .

Para la mayoría de los cmdlets, no es necesario especificar explícitamente ConfirmImpact . En su lugar, use la configuración predeterminada del parámetro , que es Medium. Si establece ConfirmImpact en Alta, la operación se confirmará de forma predeterminada. Reserve esta opción para acciones muy perjudiciales, como volver a formatear un volumen de disco duro.

Llamar a métodos que no son de confirmación

Si el cmdlet o proveedor debe enviar un mensaje pero no solicitar confirmación, puede llamar a los tres métodos siguientes. Evite usar el método System.Management.Automation.Cmdlet.WriteObject para enviar mensajes de estos tipos porque la salida de System.Management.Automation.Cmdlet.WriteObject se entremezcha con la salida normal del cmdlet o proveedor, lo que dificulta la escritura de scripts.

Los cmdlets y proveedores llaman primero a los métodos siguientes para solicitar confirmación antes de intentar realizar una operación que cambia un sistema fuera de Windows PowerShell:

Para ello, llaman al método System.Management.Automation.Cmdlet.Shouldprocess, que solicita al usuario que confirme la operación en función de cómo el usuario invocó el comando.

Vea también

Escribir un cmdlet de Windows PowerShell