Le formatage actuel d'ErrorRecord n'est pas assez utile pour les développeurs et trop inactionnable
contenu pour les utilisateurs finaux réguliers. La proposition sur la façon de résoudre ce problème finira par être un RFC, mais nous pouvons d'abord en discuter ici. Peut-être que la verbosité du format est réglable par l'utilisateur. Il y a aussi le problème du formatage spécial de la casse d'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: C'est essentiellement de quoi parle # 3647.
J'étais sur le point de poster quelque chose là-bas. Voulez-vous que nous continuions ici à la place ?
Je suis entièrement d'accord.
BTW pour les développeurs de scripts, j'aimerais voir quelque chose comme l'ancien Resolve-ErrorRecord
de Jeffrey (que nous livrons dans PSCX) intégré. Cela donne beaucoup plus d'informations (espérons-le utiles) pour les développeurs :
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 Je vais résoudre ce problème en tant que votre dupe https://github.com/PowerShell/PowerShell/issues/3647
Commentaire le plus utile
Je suis entièrement d'accord.
BTW pour les développeurs de scripts, j'aimerais voir quelque chose comme l'ancien
Resolve-ErrorRecord
de Jeffrey (que nous livrons dans PSCX) intégré. Cela donne beaucoup plus d'informations (espérons-le utiles) pour les développeurs :