Можно ли настроить отображение ошибок в powershell? - PullRequest
14 голосов
/ 16 декабря 2008

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

Ответы [ 4 ]

13 голосов
/ 16 декабря 2008

Да и да.

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

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

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

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

trap {
 # handle the error here
}

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

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

9 голосов
/ 23 февраля 2009

Вот несколько вещей, которые позволят вам настроить вывод консоли. Вы можете установить эти настройки так, как вам нравится в вашем профиле, или создать функции / сценарии, чтобы изменить их для различных целей. Может быть, вы хотите иногда режим «Не глючи меня» или «Покажи мне, что все идет не так» в других. Вы можете сделать функцию / скрипт для переключения между ними.

## 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.

2 голосов
/ 26 октября 2016

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

$ErrorView = "CategoryView"

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

[PS]> get-item D:\blah
ObjectNotFound: (D:\blah:String) [Get-Item], ItemNotFoundException
1 голос
/ 13 апреля 2011

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

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

(отвечает Крису Сирсу за этот ответ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...