Powershell - Como copiar informações de erro completas em uma armadilha

1

Estou usando o recurso de interceptação do Powershell porque gostaria de exibir informações completas de erro quando há um erro e preciso responder ao erro. Sem o uso de uma armadilha, o Powershell não me mostrará as informações de erro até depois do erro (e seja qual for o prompt de solicitação que eu respondi).

O problema com o uso do recurso de interceptação é que, embora eu possa imprimir as informações completas usando $error[0] , não consigo descobrir como copiá-las em uma sequência e obter todas as informações. Em vez disso, só recebo a informação breve.

Por exemplo, isso mostra as informações completas:

$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

Mas se eu tentar usar $ error [0] no Write-Host, ele mostrará apenas as informações de erro breves:

$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

Eu quero mostrar a informação completa do erro da armadilha com cor, e é por isso que eu preciso do Write-Host.

    
por newguy 20.07.2015 / 02:43

1 resposta

0

Quando você usa $Error[0] dentro de uma string, ToString() é implicitamente chamado, retornando apenas a string de erro. Use Out-String para obter a saída de erro completa:

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

}

ou use Write-Error :

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

}
    
por 20.07.2015 / 03:38

Tags