Errores de terminación
En este tema se analiza el método utilizado para informar errores de terminación. También se explica cómo llamar al método desde el cmdlet y se analizan las excepciones que puede devolver el tiempo de ejecución de Windows PowerShell cuando se llama al método.
Cuando se produce un error de terminación, el cmdlet debe informar el error llamando al método System.Management.Automation.Cmdlet.Throwterminatingerror*. Este método permite que el cmdlet envíe un registro de error que describe la condición que provocó el error de terminación. Para obtener más información sobre los registros de errores, consulte Registros de errores de Windows PowerShell.
Cuando se llama al método System.Management.Automation.Cmdlet.Throwterminatingerror*, el tiempo de ejecución de Windows PowerShell detiene permanentemente la ejecución de la canalización y genera una excepción System.Management.Automation.PipelinestoppedException. Cualquier intento posterior de llamar a System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteError o varias otras API hace que esas llamadas generen una excepción System.Management.Automation.PipelinestoppedException.
La excepción System.Management.Automation.Pipelinestoppedexception también puede ocurrir si otro cmdlet en la canalización informa un error de finalización, si el usuario solicitó detener la canalización o si la canalización se detuvo antes de completarse por cualquier motivo. No es necesario que el cmdlet detecte la excepción System.Management.Automation.PipelinestoppedException a menos que deba limpiar los recursos abiertos o su estado interno.
Los cmdlets pueden escribir cualquier cantidad de objetos de salida o errores de no terminación antes de informar un error de terminación. Sin embargo, el error de terminación detiene permanentemente la canalización y no se pueden informar más resultados, errores de terminación o errores de no terminación.
Los cmdlets pueden llamar a System.Management.Automation.Cmdlet.Throwterminatingerror* solo desde el subproceso que llamó a System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecord o System.Management.Automation.Cmdlet.EndProcessing método de procesamiento de entrada. No intente llamar a System.Management.Automation.Cmdlet.Throwterminatingerror* o System.Management.Automation.Cmdlet.WriteError desde otro subproceso. En cambio, los errores deben comunicarse al hilo principal.
Es posible que un cmdlet produzca una excepción en su implementación del método System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecord o System.Management.Automation.Cmdlet.EndProcessing. Cualquier excepción generada por estos métodos (excepto algunas condiciones de error graves que detiene el host de Windows PowerShell) se interpreta como un error de finalización que detiene la canalización, pero no Windows PowerShell en su totalidad. (Esto se aplica solo al subproceso del cmdlet principal. Las excepciones no detectadas en los subprocesos generados por el cmdlet, en general, detienen el host de Windows PowerShell). Le recomendamos que utilice System.Management.Automation.Cmdlet.Throwterminatingerror* en lugar de generar una excepción porque el registro de error proporciona información adicional sobre la condición de error, lo cual es útil para el usuario final. Los cmdlets deben respetar las pautas del código administrado sobre la captura y el manejo de todas las excepciones (catch (Exception e)). Convierta sólo excepciones de tipos conocidos y esperados en registros de errores.
Ver también
System.Management.Automation.Cmdlet.BeginProcessing
System.Management.Automation.Cmdlet.EndProcessing
System.Management.Automation.Cmdlet.ProcessRecord
Excepción.de.automatización.de.gestión.del.sistema.de.canalizaciones.detenidas
Error de terminación de lanzamiento del cmdlet de automatización de administración del sistema*
System.Management.Automation.Cmdlet.WriteError
Registros de errores de Windows PowerShell
Escribir un cmdlet de Windows PowerShell