Я использую функцию 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"
}