c# - 如何正确地将 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
吗?
解决方案
是的,您需要一个System.Management.Automation.ErrorRecord
实例来报告来自 PowerShell cmdlet 的错误。
您使用什么方法来报告错误取决于您是否希望它成为终止错误,或者更常见的是非终止错误:
(statement-)终止错误通过
System.Management.Automation.Cmdlet.ThrowTerminatingError
方法报告
有关何时报告哪种类型的错误的指导,请参阅此答案。
至于你尝试了什么:
WriteError(
new ErrorRecord(
exception, // parameter: exception
exception.Source, // errorId
ErrorCategory.InvalidOperation, // category
exception) // targetObject
);
您将
.Source
异常的属性值传递给 parametererrorId
,但此参数并不意味着包含原始应用程序,而是一个(自由选择的)标识错误类型的字符串,例如PathNotFound
PowerShell 自动添加源信息的字符串(原始命令的名称)并通过.FullyQualifiedErrorId
属性公开它。您传递
exception
了两次,但最后一个参数 ,targetObject
并不是指异常,而是指在处理期间发生错误的对象。
推荐阅读
- json - 尝试从 OpenWeatherMap API 提取数据时出现错误
- unix - Fortran90:标准输入脚本未按预期工作
- docker - 入口点不能覆盖 Docker 环境变量
- python - 查找/获取世界上所有 Instagram 影响者用户名的最佳方式
- javascript - Angular 方法不会绑定到最近插入的 html
- c++ - 未渲染 Qt 上的 OpenGL 多通道阴影贴图
- performance-testing - 为新开发的应用程序执行负载测试
- javascript - 在 div 上应用 onclick 后,html 中 div 的角色值应该是什么
- python - 从数据框中删除不遵循平均趋势的行
- python - 如何从列表中删除项目并使项目加入