El formato actual de ErrorRecord no es lo suficientemente útil para los desarrolladores y demasiado inaplicable
contenido para usuarios finales regulares. La propuesta sobre cómo solucionar esto terminará siendo un RFC, pero podemos discutirlo aquí primero. Quizás la verbosidad del formato sea configurable por el usuario. También existe el problema del formato especial de mayúsculas y minúsculas de ErrorRecord.
# part 1
PS C:\Users\slee\repos\PowerShell> 1/0
# part 2
PS C:\Users\slee\repos\PowerShell> $error[0] | fl
# part 1
# not sure what a good message would be for end users, but keeping it simple
Attempted to divide by zero.
At line:1 char:1
+ 1/0
# part 2 (requires -f)
PS C:\Users\slee\repos\PowerShell> $error[0] | fl -f
Exception : System.Management.Automation.RuntimeException: Attempted to divide by zero. --->
System.DivideByZeroException: Attempted to divide by zero.
--- End of inner exception stack trace ---
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)
TargetObject :
CategoryInfo : NotSpecified: (:) [], RuntimeException
FullyQualifiedErrorId : RuntimeException
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {}
PSMessageDetails :
# part 1
Attempted to divide by zero.
At line:1 char:1
+ 1/0
+ ~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException
# part 2
PS C:\Users\slee\repos\PowerShell> $error[0] | fl
Attempted to divide by zero.
At line:1 char:1
+ 1/0
+ ~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException
Name Value
---- -----
PSVersion 6.0.0-beta
PSEdition Core
GitCommitId v6.0.0-beta.6
OS Microsoft Windows 10.0.16350
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
@SteveL-MSFT: Esto es esencialmente de lo que se trata #3647.
Estaba a punto de publicar algo allí. ¿Quieres que sigamos aquí en su lugar?
Estoy de acuerdo de todo corazón.
Por cierto, para los desarrolladores de scripts, me encantaría ver algo como el viejo Resolve-ErrorRecord
de Jeffrey (que enviamos en PSCX) integrado. Esto brinda mucha más información (con suerte, útil) para los desarrolladores:
4:5ms> Resolve-ErrorRecord
PSMessageDetails :
Exception : System.Management.Automation.RuntimeException: Attempted to divide by zero. --->
System.DivideByZeroException: Attempted to divide by zero.
--- End of inner exception stack trace ---
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)
TargetObject :
CategoryInfo : NotSpecified: (:) [], RuntimeException
FullyQualifiedErrorId : RuntimeException
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo : {}
MyCommand :
BoundParameters : {}
UnboundArguments : {}
ScriptLineNumber : 1
OffsetInLine : 1
HistoryId : -1
ScriptName :
Line : 1/$x
PositionMessage : At line:1 char:1
+ 1/$x
+ ~~~~
PSScriptRoot :
PSCommandPath :
InvocationName :
PipelineLength : 0
PipelinePosition : 0
ExpectingInput : False
CommandOrigin : Internal
DisplayScriptPosition :
Exception at nesting level 0 ---------------------------------------------------
ErrorRecord : Attempted to divide by zero.
WasThrownFromThrowStatement : False
Message : Attempted to divide by zero.
Data : {System.Management.Automation.Interpreter.InterpretedFrameInfo}
InnerException : System.DivideByZeroException: Attempted to divide by zero.
TargetSite : System.Object Divide(Int32, Int32)
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(Interp
retedFrame frame)
HelpLink :
Source : System.Management.Automation
HResult : -2146233087
Exception at nesting level 1 ---------------------------------------------------
Message : Attempted to divide by zero.
Data : {}
InnerException :
TargetSite :
StackTrace :
HelpLink :
Source :
HResult : -2147352558
@mklement0 Resolveré esto como un engaño tuyo https://github.com/PowerShell/PowerShell/issues/3647
Comentario más útil
Estoy de acuerdo de todo corazón.
Por cierto, para los desarrolladores de scripts, me encantaría ver algo como el viejo
Resolve-ErrorRecord
de Jeffrey (que enviamos en PSCX) integrado. Esto brinda mucha más información (con suerte, útil) para los desarrolladores: