Powershell: ¿Cómo puedo copiar la información completa del error en una trampa?

Powershell: ¿Cómo puedo copiar la información completa del error en una trampa?

Estoy usando la función de captura de Powershell porque me gustaría generar información de error completa cuando hay un error y tengo que responder al error. Sin el uso de una trampa, Powershell no me mostrará la información del error hasta después del error (y cualquier mensaje de consulta al que respondí).

El problema con el uso de la función de captura es que, aunque puedo imprimir la información completa, $error[0]no sé cómo copiarla en una cadena y obtener la información completa. En lugar de eso, solo obtengo información breve.

Por ejemplo, esto muestra la información completa:

$ErrorActionPreference = "Stop"
trap {$error[0]; Read-Host -Prompt "Trapped. Press Enter to exit"}
Split-Path -BAD
echo "Running script"
Read-Host -Prompt "Press Enter to exit"

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Trapped. Press Enter to exit: 

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParentContainsErrorRecordExce 
   ption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Pero si intento usar $error[0] de Write-Host, solo muestra una breve información del error:

$ErrorActionPreference = "Stop"
trap {Write-Host -ForegroundColor Red -BackgroundColor Black "$($error[0])"; Read-Host -Prompt "Trapped. Press Enter to exit"}
Split-Path -BAD
echo "Running script"
Read-Host -Prompt "Press Enter to exit"

A parameter cannot be found that matches parameter name 'BAD'.
Trapped. Press Enter to exit: 

Split-Path : A parameter cannot be found that matches parameter name 'BAD'.
At line:3 char:12
+ Split-Path -BAD
+            ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Split-Path], ParentContainsErrorRecordExce 
   ption
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SplitPathCo 
   mmand

Quiero mostrar la información completa del error de la trampa con color, por eso necesito Write-Host.

Respuesta1

Cuando se usa $Error[0]dentro de una cadena, ToString()se llama implícitamente y devuelve solo la cadena de error. Úselo Out-Stringpara obtener el resultado de error completo:

trap {
    Write-Host -ForegroundColor Red -BackgroundColor Black "$($Error[0] | Out-String)"
    Read-Host "Press enter"

}

o utilizar Write-Erroren su lugar:

trap {
    Write-Error $Error[0]
    Read-Host "Press enter"

}

información relacionada