在大多数情况下,System.Management.Automation.ErrorRecord 对象表示命令或脚本生成的非终止错误。 终止错误还可以通过 System.Management.Automation.IContainsErrorRecord 接口指定 ErrorRecord 中的其他信息。
如果要在脚本或主机中编写错误处理程序来处理在命令或脚本执行期间发生的特定错误,则必须解释 System.Management.Automation.ErrorRecord 对象,以确定它是否表示要处理的错误类。
当 cmdlet 遇到终止或非终止错误时,它应创建描述错误条件的错误记录。 主机应用程序必须调查这些错误记录,并执行任何作都会减轻错误。 主机应用程序还必须调查无法处理记录但能够继续处理的非终止错误的错误记录,并且必须调查导致管道停止的错误的错误记录。
注释
对于终止错误,该 cmdlet 调用 System.Management.Automation.Cmdlet.ThrowTerminatingError 方法。 对于非终止错误,cmdlet 调用 System.Management.Automation.Cmdlet.WriteError 方法。
错误记录设计
错误记录旨在提供异常中不可用的其他错误信息,同时确保每个错误记录中的合并信息是唯一的。 此唯一性允许主机应用程序检查错误记录的不同部分,以便它可以识别错误条件和主机必须执行的作。
解释错误记录
可以查看错误记录的多个部分,以确定错误。 这些部分包括以下内容:
错误类别
错误异常
完全限定的错误标识符 (FQID)
其他信息
错误类别
错误记录的错误类别是 System.Management.Automation.ErrorCategory 枚举提供的预定义常量之一。 此信息可通过 System.Management.Automation.ErrorRecord 对象的 System.Management.Automation.ErrorRecord.CategoryInfo 属性获取。
该 cmdlet 可以指定 CloseError、OpenError、InvalidType、ReadError 和 WriteError 类别和其他错误类别。 主机应用程序可以使用错误类别捕获错误组。
异常
错误记录中包含的异常由 cmdlet 提供,可通过 System.Management.Automation.ErrorRecord 对象的 System.Management.Automation.ErrorRecord.Exception 属性进行访问。
主机应用程序可以使用 is 关键字来标识异常是特定类还是派生类。 最好对异常类型进行分支,如以下示例所示。
`if (MyNonTerminatingError.Exception is AccessDeniedException)`
{
...
}
这样,就可以捕获派生类。 但是,如果反序列化异常,则会出现问题。
The FQID
FQID 是可用于识别错误的最具体信息。 它是一个字符串,其中包含 cmdlet 定义的标识符、cmdlet 类的名称以及报告错误的源。 通常,错误记录类似于 Windows 事件日志的事件记录。 FQID 类似于以下元组,它标识事件记录的类:(日志名称、源、事件 ID)。
FQID 旨在作为单个字符串进行检查。 但是,存在错误标识符设计为由主机应用程序分析的情况。 下面的示例是格式正确的完全限定错误标识符。
CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand.
在前面的示例中,第一个标记是错误标识符,后跟 cmdlet 类的名称。 错误标识符可以是单个标记,也可以是一个点分隔的标识符,用于对标识符进行分支检查。 不要在错误标识符中使用空格或标点符号。 请务必不要使用逗号;Windows PowerShell 使用逗号分隔标识符和 cmdlet 类名。
其他信息
System.Management.Automation.ErrorRecord 对象也可能提供描述发生错误的环境的信息。 此信息包括错误详细信息、调用信息和发生错误时正在处理的目标对象等项。 虽然此信息可能对主机应用程序有用,但它通常用于识别错误。 可通过以下属性获取此信息: