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.
Para advertir al usuario y continuar con la operación, el cmdlet o proveedor puede llamar al método System.Management.Automation.Cmdlet.WriteWarning.
Para proporcionar información adicional que el usuario puede recuperar mediante el parámetro , el cmdlet o proveedor puede llamar al método
Verbose
System.Management.Automation.Cmdlet.WriteVerbose.Para proporcionar detalles de nivel de depuración para otros desarrolladores o para soporte técnico de productos, el cmdlet o proveedor puede llamar al método System.Management.Automation.Cmdlet.WriteDebug. El usuario puede recuperar esta información mediante el
Debug
parámetro .
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de