【发布时间】:2015-06-03 16:51:45
【问题描述】:
我是一名 C# 开发人员,正在尝试使用 PowerShell 构建一些有用的东西。这就是为什么我一直尝试在 PowerShell 中使用来自 .NET 世界的知名习语。
我正在编写一个具有不同抽象层的脚本:数据库操作、文件操作等。有时我想捕捉一个错误并将其包装成对最终用户更有意义的东西。这是 C#/Java/C++ 代码的常见模式:
Function LowLevelFunction($arg)
{
# Doing something very useful here!
# but this operation could throw
if (!$arg) {throw "Ooops! Can't do this!"}
}
现在,我想调用这个函数并包装一个错误:
Function HighLevelFunction
{
Try
{
LowLevelFunction
}
Catch
{
throw "HighLevelFunction failed with an error!`nPlease check inner exception for more details!`n$_"
}
}
这种方法几乎是我需要的,因为HighLevelFunction会抛出新的错误,而原来错误的根本原因会丢失!
在 C# 代码中,我总是可以抛出新异常并将原始异常作为内部异常提供。在这种情况下,HighLevelFunction 将能够以对客户更有意义的形式传达他们的错误,但仍会提供内部详细信息用于诊断目的。
在 PowerShell 中打印原始异常的唯一方法是使用存储所有异常的 $Error 变量。这没关系,但我的脚本的用户(现在是我自己)应该做更多我想做的事情。
所以问题是:有没有办法在 PowerShell 中引发异常并将原始错误作为内部错误提供?
【问题讨论】:
-
可以在PowerShell中抛出异常:
try { ... } catch { throw (New-Object System.Exception 'Some message.',$_.Exception) } -
谢谢,@PetSerAl。有没有“powershell方式”来做到这一点?
-
恕我直言,大多数“PowerShell 方式”将使用
$PSCmdlet.WriteError和$PSCmdlet.ThrowTerminatingError,它们可用于高级功能。
标签: powershell