When PowerShell encounters a problem, it displays a rather lengthy error message:
PS> 1/0
Attempted to divide by zero.
At line:1 char:1
+ 1/0
+ ~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException
In real life, you often just need the first line, and as early as in 2006, the PowerShell team added a preference variable called $ErrorView that can control the way how error messages display. When you assign the “CategoryView” value, this shortens error messages considerably:
PS> $ErrorView = 'CategoryView'
PS> 1/0
NotSpecified: (:) [], RuntimeException
PS>
Unfortunately, this did not really work well because the one line failed to combine the truly important information, and you can assign the “NormalView” value to return to the default view. Coincidentally, this lack of usefulness is why most people never heard about $ErrorView.
Fortunately, in PowerShell 7 (introduced in RC1), the team remembered and finally fixed this. To not break compatibility, they chose to add a third option: ConciseView. Now, the one-liner error message works right and displays all information a typical user would need to know:
PS> $ErrorView = ConciseView
PS> 1/0
RuntimeException: Attempted to divide by zero.
PS>
As a PowerShell developer, simply switch back to “NormalView” to see the rest of the error message. Or – even better – run Get-Error -Newest 1 to get detailed information about the latest error:
PS C:\> 1/0 RuntimeException: Attempted to divide by zero. PS C:\> Get-Error -Newest 1 Exception : Type : System.Management.Automation.RuntimeException ErrorRecord : Exception : Type : System.Management.Automation.ParentContainsErrorRecordException Message : Attempted to divide by zero. HResult : -2146233087 CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException FullyQualifiedErrorId : RuntimeException InvocationInfo : ScriptLineNumber : 1 OffsetInLine : 1 HistoryId : -1 Line : 1/0 PositionMessage : At line:1 char:1 + 1/0 + ~~~ CommandOrigin : Internal ScriptStackTrace : at <ScriptBlock>, <No file>: line 1 TargetSite : Name : Divide DeclaringType : System.Management.Automation.IntOps, System.Management.Automation, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 MemberType : Method Module : System.Management.Automation.dll StackTrace : at System.Management.Automation.IntOps.Divide(Int32 lhs, Int32 rhs) at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) Message : Attempted to divide by zero. Data : System.Collections.ListDictionaryInternal InnerException : Type : System.DivideByZeroException Message : Attempted to divide by zero. HResult : -2147352558 ; Source : System.Management.Automation HResult : -2146233087 CategoryInfo : NotSpecified: (:) [], RuntimeException FullyQualifiedErrorId : RuntimeException InvocationInfo : ScriptLineNumber: 1 OffsetInLine : 1 HistoryId : -1 Line : 1/0 PositionMessage : At line:1 char:1 + 1/0 + ~~~ CommandOrigin : Internal ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
You are a PowerShell Professional, passionate about improving your code and skills? You take security seriously and are always looking for the latest advice and guidance to make your code more secure and faster? You’d love to connect to the vibrant PowerShell community and get in touch with other PowerShell Professionals to share tricks and experience? Then PowerShell Conference EU 2020 might be just the right place for you: https://psconf.eu (June 2-5, 2020 in Hanover, Germany).
It’s a unique mixture of classic conference with three parallel tracks filled with fast-paced PowerShell presentations, and advanced learning class with live discussions, Q&A and plenty of networking.
Secure your seat while they last: https://psconf.eu/register.html. The speakers and agenda is available here: https://psconf.eu/schedule.