Is it possible to customize error display in powershell? Is it possible to customize error display in powershell? powershell powershell

Is it possible to customize error display in powershell?


Yes and yes.

You can use the built-in $host object if all you want to do is change the text color. However, you can't change the error message itself - that's hardcoded.

What you could do is (a) suppress the error messages, and instead (b) trap the errors and display your own.

Accomplish (a) by setting $ErrorActionPreference = "SilentlyContinue" - this won't STOP the error, but it suppresses the messages.

Accomplishing (b) requires a bit more work. By default, most PowerShell commands don't produce a trappable exception. So you'll have to learn to run commands and add the -EA "Stop" parameter to generate a trappable exception if something goes wrong. Once you've done that, you can create a trap in the shell by typing:

trap { # handle the error here}

You could put this in your profile script rather than typing it every time. Inside the trap, you can output whatever error text you like by using the Write-Error cmdlet.

Probably more work than you were wanting to do, but that's basically how you'd do what you asked.


Here is a bunch of stuff that will let you customize your console output. You can set these settings as you like in your profile, or make functions/scripts to change them for different purposes. Maybe you want a "Don't bug me" mode sometimes, or a "Show me everything going wrong" at others. You could make a function/script to change between those.

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

You can also use the -ErrorAction and -ErrorVariable parameters on cmdlets to affect only that cmdlet call. The second one will send errors to the specified variable instead of the default $Error.


This may or may not be what you want, but there is a $ErrorView preference variable that you can set:

$ErrorView = "CategoryView"

This gives a shorter one-line error message, for example:

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