Почему Write-Error отображает весь код над ним?

Недавно я читал о причинах не использовать Write-Host в PowerShell, поэтому я начал использовать Write-Verbose, Write-Warning и Write-Output... но у меня возникают некоторые проблемы с выводом, который я получаю от Write-Error.

Вот простой пример его использования в скрипте.

1..5 | foreach{
    if ($_ -eq 5){
        Write-Error "Invalid result"
    }
}

Когда появляется ошибка, я получаю следующее.

1..5 | foreach{
    if ($_ -eq 5){
        Write-Error "Invalid result"
    }
} : Invalid result
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

Я не понимаю, почему он отображает весь код над ошибкой. это просто делает вывод на экране очень грязным, особенно в длинном сценарии. Например, в настоящее время я разрабатываю сценарий для автоматизации процесса создания, изменения, отключения и удаления нашего пользователя, и он состоит из нескольких сотен строк, поэтому, если я хочу написать нескончаемую ошибку, я не хочу видеть весь код над ней.... Это просто глупо.

Какие-либо предложения. Я думал об использовании предупреждения о записи, однако это действительно не завершающая ошибка, которую я хочу отобразить... поэтому я пытаюсь использовать лучшие практики.

Спасибо,

1 ответ

Вам нужно использовать Write-Error выводить нескончаемые ошибки. Однако, если вы хотите, чтобы вывод ошибок был менее подробным, вы можете установить $ErrorView переменная к CategoryView например:

64> $ErrorView = 'CategoryView'
65> 1..5 | foreach{
>>>     if ($_ -eq 5){
>>>         Write-Error "Invalid result"
>>>     }
>>> }
>>>
NotSpecified: (:) [Write-Error], WriteErrorException
Другие вопросы по тегам