Powershell - Как скопировать полную информацию об ошибке в ловушку

Powershell - Как скопировать полную информацию об ошибке в ловушку

Я использую функцию Powershell trap, потому что я хотел бы выводить полную информацию об ошибке, когда есть ошибка, и мне нужно ответить на ошибку. Без использования trap Powershell не покажет мне информацию об ошибке до тех пор, пока не произойдет ошибка (и не будет выполнен запрос Inquire, на который я ответил).

Проблема с использованием функции ловушки заключается в том, что хотя я могу распечатать полную информацию с помощью, $error[0]я не могу понять, как скопировать ее в строку и получить полную информацию. Вместо этого я получаю только краткую информацию.

Например, здесь показана полная информация:

$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

Но если я попытаюсь использовать $error[0] из Write-Host, то покажется только краткая информация об ошибке:

$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

Я хочу показать полную информацию об ошибке из ловушки цветом, поэтому мне нужен Write-Host.

решение1

При использовании $Error[0]внутри строки ToString()неявно вызывается, возвращая только строку ошибки. Используйте Out-Stringдля получения полного вывода ошибки:

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

}

или используйте Write-Errorвместо этого:

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

}

Связанный контент