14

我发现标准的 Powershell 错误显示(红色文本、多行显示)有点让人分心。可以定制这个吗?

4

4 回答 4

13

是的,是的。

$host如果您只想更改文本颜色,则可以使用内置对象。但是,您不能更改错误消息本身 - 这是硬编码的。

您可以做的是(a)抑制错误消息,而不是(b)捕获错误并显示您自己的错误。

通过设置完成 (a) $ErrorActionPreference = "SilentlyContinue"- 这不会停止错误,但会抑制消息。

完成(b)需要更多的工作。默认情况下,大多数 PowerShell 命令不会产生可捕获的异常。因此,您必须学习运行命令并添加 -EA "Stop" 参数以在出现问题时生成可捕获的异常。完成此操作后,您可以通过键入以下内容在 shell 中创建一个陷阱:

trap {
 # handle the error here
}

您可以将其放入您的配置文件脚本中,而不是每次都输入它。在陷阱内,您可以使用 Write-Error cmdlet 输出您喜欢的任何错误文本。

可能比你想做的工作更多,但这基本上就是你做你所要求的事情的方式。

于 2008-12-15T23:20:59.110 回答
9

这里有一堆东西可以让你自定义你的控制台输出。您可以在个人资料中随意设置这些设置,或制作函数/脚本以针对不同目的进行更改。也许你有时想要一个“不要打扰我”模式,或者在其他人那里想要一个“告诉我一切都错了”。您可以制作一个函数/脚本来在它们之间进行更改。

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

您还可以在 cmdlet 上使用 -ErrorAction 和 -ErrorVariable 参数来仅影响该 cmdlet 调用。第二个将错误发送到指定的变量而不是默认的 $Error。

于 2009-02-22T21:25:31.353 回答
3

这可能是也可能不是您想要的,但是您可以设置一个$ErrorView首选项变量:

$ErrorView = "CategoryView"

这给出了一个较短的单行错误消息,例如:

[PS]> get-item D:\blah
ObjectNotFound: (D:\blah:String) [Get-Item], ItemNotFoundException
于 2016-10-26T13:17:52.103 回答
2

此外,您可以这样做以编写特定的错误文本行:

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

(克里斯西尔斯的这个答案的道具)

于 2011-04-13T19:55:25.863 回答