1

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

Проблема с использованием функции trap заключается в том, что, хотя я могу напечатать полную информацию, используя $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 ответ1

0

Когда вы используете $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"

}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .