Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe el método usado para notificar errores de terminación. También se describe cómo llamar al método desde el cmdlet y se describen 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 notificar el error llamando al método System.Management.Automation.Cmdlet.ThrowTerminatingError*. Este método permite al cmdlet enviar 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, vea 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 e inicia una excepción System.Management.Automation.PipelineStoppedExcep tion. Cualquier intento posterior de llamar a System.Management.Automation.Cmdlet.WriteObject, System.Management.Automation.Cmdlet.WriteError, o varias otras API hacen que esas llamadas inicien una excepción System.Management.Automation.PipelineStoppedException.
La excepción System.Management.Automation.PipelineStoppedException también puede producirse si otro cmdlet de la canalización notifica un error de terminación, si el usuario ha pedido que detenga la canalización o si la canalización se ha detenido antes de la finalización por cualquier motivo. El cmdlet no necesita detectar el System.Management.Automation.PipelineStoppedException excepción a menos que deba limpiar los recursos abiertos o su estado interno.
Los cmdlets pueden escribir cualquier número de objetos de salida o errores de no terminación antes de notificar un error de terminación. Sin embargo, el error de terminación detiene permanentemente la canalización y no se puede notificar ningún resultado adicional, 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ó al System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordo Método de procesamiento de entrada System.Management.Automation.Cmdlet.EndProcessing. No intente llamar a System.Management.Automation.Cmdlet.ThrowTerminatingError* o System.Management.Automation.Cmdlet.WriteError desde otro subproceso. En su lugar, los errores se deben volver a comunicar al subproceso principal.
Es posible que un cmdlet inicie una excepción en su implementación de la System.Management.Automation.Cmdlet.BeginProcessing, System.Management.Automation.Cmdlet.ProcessRecordo método System.Management.Automation.Cmdlet.EndProcess ing. Cualquier excepción producida por estos métodos (excepto por algunas condiciones de error graves que detengan el host de Windows PowerShell) se interpreta como un error de terminación que detiene la canalización, pero no Windows PowerShell en su conjunto. (Esto solo se aplica al subproceso principal del cmdlet. Excepciones no detectadas en subprocesos generados por el cmdlet, en general, detenga el host de Windows PowerShell). Se recomienda usar System.Management.Automation.Cmdlet.ThrowTerminatingError* en lugar de producir una excepción porque el registro de error proporciona información adicional sobre la condición de error, que resulta útil para el usuario final. Los cmdlets deben respetar la guía de código administrado para detectar y controlar todas las excepciones (catch (Exception e)). Convierta solo excepciones de tipos conocidos y esperados en registros de error.
Véase también
System.Management.Automation.Cmdlet.BeginProcessing
System.Management.Automation.Cmdlet.EndProcessing
System.Management.Automation.Cmdlet.ProcessRecord
System.Management.Automation.PipelineStoppedException
System.Management.Automation.Cmdlet.ThrowTerminatingError*
System.Management.Automation.Cmdlet.WriteError