我是一位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!"}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想调用此函数并包装一个错误:
Function HighLevelFunction
{
Try
{
LowLevelFunction
}
Catch
{
throw "HighLevelFunction failed with an error!`nPlease check inner exception for more details!`n$_"
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法几乎是我所需要的,因为HighLevelFunction它将引发新的错误,而原始错误的根本原因将会丢失!
在C#代码中,我总是可以抛出新的异常并将原始异常作为内部异常提供。在这种情况下,HighLevelFunction将能够以对他们的客户更有意义的形式传达他们的错误,但仍将提供内部细节以用于诊断目的。
在PowerShell中打印原始异常的唯一方法是使用$Error存储所有异常的变量。可以,但是我脚本的用户(现在是我自己)应该做更多我想做的事情。
所以问题是:有什么方法可以在PowerShell中引发异常并将原始错误提供为内部错误?
您可以在块中引发新异常catch并指定基本异常:
# Function that will throw a System.IO.FileNotFoundExceptiopn
function Fail-Read {
[System.IO.File]::ReadAllLines( 'C:\nonexistant' )
}
# Try to run the function
try {
Fail-Read
} catch {
# Throw a new exception, specifying the inner exception
throw ( New-Object System.Exception( "New Exception", $_.Exception ) )
}
# Check the exception here, using getBaseException()
$error[0].Exception.getBaseException().GetType().ToString()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |