首页 > 解决方案 > 如何正确地将 C# 错误写入 powershell

问题描述

假设我有以下块:

protected override void ProcessRecord()
{
  try
  {
    // code that throws
  }
  catch (System.Exception exception)
  {
    // handle error
  }
}

如何正确编写异常?使用WriteError? 以下是一个好方法吗?

WriteError(new ErrorRecord(exception, exception.Source, ErrorCategory.InvalidOperation, exception));

如果是这样,我应该使用ErrorRecord吗?

标签: c#powershell

解决方案


是的,您需要一个System.Management.Automation.ErrorRecord实例来报告来自 PowerShell cmdlet 的错误。

您使用什么方法来报告错误取决于您是否希望它成为终止错误,或者更常见的是非终止错误:

有关何时报告哪种类型的错误的指导,请参阅此答案。


至于你尝试了什么:

WriteError(
  new ErrorRecord(
   exception,                      // parameter: exception
   exception.Source,               // errorId
   ErrorCategory.InvalidOperation, // category
   exception)                      // targetObject
);
  • 您将.Source异常的属性值传递给 parameter errorId,但此参数并不意味着包含原始应用程序,而是一个(自由选择的)标识错误类型的字符串,例如PathNotFoundPowerShell 自动添加源信息的字符串(原始命令的名称)并通过.FullyQualifiedErrorId属性公开它。

  • 您传递exception了两次,但最后一个参数 ,targetObject并不是指异常,而是指在处理期间发生错误的对象


推荐阅读