Я обнаружил, что стандартное отображение ошибок Powershell (красный текст, многострочный дисплей) немного отвлекает. Можно ли настроить это?
Можно ли настроить отображение ошибок в powershell?
Ответ 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