Подтвердить что ты не робот

Можно ли настроить отображение ошибок в powershell?

Я обнаружил, что стандартное отображение ошибок Powershell (красный текст, многострочный дисплей) немного отвлекает. Можно ли настроить это?

4b9b3361

Ответ 1

Да и да.

Вы можете использовать встроенный объект $host, если все, что вы хотите сделать, это изменить цвет текста. Однако вы не можете изменить само сообщение об ошибке - это жестко запрограммированное.

Что вы можете сделать, это (a) подавить сообщения об ошибках и вместо этого (b) заманить ошибки и отобразить свои собственные.

Выполняйте (a), установив $ErrorActionPreference = "SilentlyContinue" - это не приведет к ошибке STOP, но оно подавляет сообщения.

Выполнение (b) требует немного больше работы. По умолчанию большинство команд PowerShell не генерируют исключение trappable. Поэтому вам нужно научиться запускать команды и добавлять параметр -EA "Стоп" для генерации исключения trappable, если что-то пойдет не так. Как только вы это сделаете, вы можете создать ловушку в оболочке, набрав:

trap {
 # handle the error here
}

Вы можете поместить это в свой профиль script, а не вводить его каждый раз. Внутри ловушки вы можете выводить любой текст ошибки, который вам нравится, с помощью командлета Write-Error.

Вероятно, больше работы, чем вы хотели, но в основном, как вы будете делать то, что вы просили.

Ответ 2

Вот куча вещей, которые позволят вам настроить вывод консоли. Вы можете установить эти параметры по своему усмотрению в своем профиле или сделать функции/скрипты для их изменения в разных целях. Возможно, вам иногда нужен режим "Do not bug me", или "Покажите мне, что все идет не так" в других. Вы можете сделать функцию / script для изменения между ними.

## Change colors of regular text
$Host.UI.RawUI.BackGroundColor = "DarkMagenta"
$Host.UI.RawUI.ForeGroundColor = "DarkYellow" 

## Change colors of special messages (defaults shown)
$Host.PrivateData.DebugBackgroundColor = "Black"
$Host.PrivateData.DebugForegroundColor = "Yellow"
$Host.PrivateData.ErrorBackgroundColor = "Black"
$Host.PrivateData.ErrorForegroundColor = "Red"
$Host.PrivateData.ProgressBackgroundColor = "DarkCyan"
$Host.PrivateData.ProgressForegroundColor = "Yellow"
$Host.PrivateData.VerboseBackgroundColor = "Black"
$Host.PrivateData.VerboseForegroundColor = "Yellow"
$Host.PrivateData.WarningBackgroundColor = "Black"
$Host.PrivateData.WarningForegroundColor = "Yellow"

## Set the format for displaying Exceptions (default shown)
## Set this to "CategoryView" to get less verbose, more structured output
## http://blogs.msdn.com/powershell/archive/2006/06/21/641010.aspx
$ErrorView = "NormalView"

## NOTE: This section is only for PowerShell 1.0, it is not used in PowerShell 2.0 and later
## More control over display of Exceptions (defaults shown), if you want more output
$ReportErrorShowExceptionClass = 0
$ReportErrorShowInnerException = 0
$ReportErrorShowSource = 1
$ReportErrorShowStackTrace = 0

## Set display of special messages (defaults shown)
## http://blogs.msdn.com/powershell/archive/2006/07/04/Use-of-Preference-Variables-to-control-behavior-of-streams.aspx
## http://blogs.msdn.com/powershell/archive/2006/12/15/confirmpreference.aspx
$ConfirmPreference = "High"
$DebugPreference = "SilentlyContinue"
$ErrorActionPreference = "Continue"
$ProgressPreference = "Continue"
$VerbosePreference = "SilentlyContinue"
$WarningPreference = "Continue"
$WhatIfPreference = 0

Вы также можете использовать параметры -ErrorAction и -ErrorVariable для командлетов, чтобы влиять только на этот вызов командлета. Второй отправит ошибки в указанную переменную вместо $Error.

Ответ 3

Кроме того, вы можете сделать это, чтобы написать определенную строку текста ошибки:

$Host.UI.WriteErrorLine("This is an error")

(реквизит для Криса Сирса для этого ответа)

Ответ 4

Это может быть или не быть тем, что вы хотите, но существует переменная предпочтений $ErrorView, которую вы можете установить:

$ErrorView = "CategoryView"

Это дает более короткое однострочное сообщение об ошибке, например:

[PS]> get-item D:\blah
ObjectNotFound: (D:\blah:String) [Get-Item], ItemNotFoundException