Solicitar confirmación de cmdlets
Los cmdlets deben solicitar confirmación cuando estén a punto de realizar un cambio en el sistema que está fuera del entorno de Windows PowerShell. Por ejemplo, si un cmdlet está a punto de agregar una cuenta de usuario o detener un proceso, el cmdlet debería requerir la confirmación del usuario antes de continuar. Por el contrario, si un cmdlet está a punto de cambiar una variable de Windows PowerShell, no es necesario que el cmdlet requiera 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 una confirmación. mensaje de solicitud.
Solicitudes de confirmación de soporte
Para admitir solicitudes de confirmación, el cmdlet debe establecer el parámetro SupportsShouldProcess del atributo del cmdlet en true. Esto habilita los parámetros de cmdlet Confirm y WhatIf proporcionados por Windows PowerShell. El parámetro Confirmar permite al usuario controlar si se muestra la solicitud de confirmación. El parámetro WhatIf 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.
El siguiente ejemplo muestra una declaración de atributo de 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 realizar la operación que cambia el sistema. Diseñe el cmdlet de modo que si la llamada devuelve un valor de false, la operación no se realice y el cmdlet procese la siguiente operación.
Llamar al método debería continuar
La mayoría de los cmdlets solicitan confirmación utilizando únicamente el método System.Management.Automation.Cmdlet.ShouldProcess. Sin embargo, algunos casos pueden requerir confirmación adicional. Para estos casos, complemente la llamada System.Management.Automation.Cmdlet.ShouldProcess con una llamada al método System.Management.Automation.Cmdlet.ShouldContinue. Esto permite que el cmdlet o el proveedor controlen con mayor precisión el alcance de la respuesta Sí a todos al mensaje de confirmación.
Si un cmdlet llama al método System.Management.Automation.Cmdlet.ShouldContinue, el cmdlet también debe proporcionar un parámetro de cambio Force. Si el usuario especifica Force cuando invoca el cmdlet, el cmdlet aún debe llamar a System.Management.Automation.Cmdlet.ShouldProcess, pero debe omitir la llamada a System.Management.Automation.Cmdlet.ShouldContinue .
System.Management.Automation.Cmdlet.ShouldContinue generará una excepción cuando se llame desde un entorno no interactivo donde no se puede avisar al usuario. Agregar un parámetro Force garantiza que el comando aún se pueda ejecutar cuando se invoca en un entorno no interactivo.
En el siguiente ejemplo 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 System.Management.Automation.Cmdlet.ShouldProcess puede variar según el entorno en el que se invoca el cmdlet. El uso de las pautas anteriores ayudará a garantizar que el cmdlet se comporte de manera coherente con otros cmdlets, independientemente del entorno del host.
Para ver un ejemplo de cómo llamar al método System.Management.Automation.Cmdlet.ShouldProcess, consulte Cómo solicitar confirmaciones.
Especificar el nivel de impacto
Cuando cree el cmdlet, especifique el nivel de impacto (la gravedad) del cambio. Para ello, establezca el valor del parámetro ConfirmImpact del atributo cmdlet en Alto, Medio o Bajo. Puede especificar un valor para ConfirmImpact solo cuando también especifica el parámetro SupportsShouldProcess para el cmdlet.
Para la mayoría de los cmdlets, no es necesario especificar explícitamente ConfirmImpact. En su lugar, utilice la configuración predeterminada del parámetro, que es Media. Si configura ConfirmImpact en Alto, la operación se confirmará de forma predeterminada. Reserve esta configuración para acciones altamente disruptivas, como reformatear un volumen de disco duro.
Llamar a métodos sin confirmación
Si el cmdlet o el 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 entremezcla con la salida normal de su cmdlet o proveedor, lo que dificulta la escritura de scripts.
Para advertir al usuario y continuar con la operación, el cmdlet o el proveedor pueden llamar al método System.Management.Automation.Cmdlet.WriteWarning.
-
Para proporcionar información adicional que el usuario pueda recuperar mediante el parámetro
Verbose, el cmdlet o el proveedor pueden llamar al método System.Management.Automation.Cmdlet.WriteVerbose. Para proporcionar detalles a nivel de depuración para otros desarrolladores o para soporte del producto, el cmdlet o proveedor puede llamar al método System.Management.Automation.Cmdlet.WriteDebug. El usuario puede recuperar esta información utilizando el parámetro
Debug.
Los cmdlets y proveedores primero llaman a los siguientes métodos para solicitar confirmación antes de intentar realizar una operación que cambie un sistema fuera de Windows PowerShell:
El cmdlet.de.automatización.de.gestión.del.sistema.debe.procesarse
System.Management.Automation.Provider.Cmdletprovider.Shouldprocess
Lo hacen llamando al método System.Management.Automation.Cmdlet.Shouldprocess, que solicita al usuario que confirme la operación según cómo invocó el comando.
Ver también
Escribir un cmdlet de Windows PowerShell