【问题标题】:How and when ErrorDetails.RecommendedAction property used?如何以及何时使用 ErrorDetails.RecommendedAction 属性?
【发布时间】:2016-04-13 01:42:12
【问题描述】:

ErrorDetails.RecommendedAction 属性如何以及何时使用?默认情况下似乎不会使用它:

using namespace System
using namespace System.Management.Automation
$exception = New-Object Exception -ArgumentList "This is the Exception message"
$errorRecord = New-Object ErrorRecord -ArgumentList $exception, "This is the ErrorRecord Message", NotSpecified, $null
$errorDetails = New-Object ErrorDetails -ArgumentList "This is the ErrorDetails message"
$errorRecord.ErrorDetails = $errorDetails
$errorDetails.RecommendedAction = "This is the recommended action"
Write-Error $errorRecord 
 : This is the ErrorDetails message
+ CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException

【问题讨论】:

  • Powershell Get-Help 'about_Try_Catch_Finally' -ShowWindow
  • PS 以自定义格式显示某些类型。有关详细信息,请参阅help about_format.ps1xml。在 ErrorRecord 的情况下,默认不显示 RecommendAction。您可以这样做:$errorRecord|select *$errorRecord|ft * 查看所有 ErrorRecord 字段。或$errorRecord.recommendedaction 只访问一个字段。
  • 差不多,但不完全正确 - 它位于 $ErrorRecord.ErrorDetails.RecommendedAction

标签: powershell error-reporting


【解决方案1】:

它不被引擎中的任何东西使用,AFAIK。

但是,您可以将其用于您自己的目的!

我现在有一个问题要解决,因为请求的更改已经到位,因此任务可能会失败 - 例如添加用户帐户,但该帐户已存在。

我们的编码风格要求我们发出一个(非终止的)错误,这符合 New-Item 等项目已经存在时的行为。

但我们的上游自动化不应将工单移动到队列中以进行进一步操作 - 默认情况下,它会在发生错误时这样做。

在我们的代码中,我们可以这样做

Write-Error 'whatever error msg' -RecommendedAction 'NoFurtherAction'

并且上游客户端可以根据 ErrorDetails 中的这个字符串过滤工单操作:

$Error[0].ErrorDetails.RecommendedAction -eq 'NoFurtherAction'

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2012-05-13
    • 2011-06-07
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多