gpt4 book ai didi

powershell - 如何使用变量存储catch block 的错误类型?

转载 作者:行者123 更新时间:2023-12-03 07:52:53 25 4
gpt4 key购买 nike

我想处理脚本中每个命令的异常。为此,我正在编写try..catch的函数。该函数有两个参数:$command(要执行的命令)和$errorType(在catch块中指定的可选错误类型)。

function tryCatch ($command, $errorType) {
try {
$command
} catch [$errorType] {
# function to be called if this error type occurs
catchError
}
}

但是我不知道如何将错误类型作为变量传递给catch块。我收到此错误:

在\ script.ps1:233 char:25
+尝试{$ command} catch [$ errorType] {catchError}
+〜
“[”后缺少类型名称。

我试图绕过它,但似乎没有任何效果。有没有办法做到这一点?

最佳答案

简短的回答,我不相信您可以做您想做的事情。演练只是为了确保我了解这种情况。
catch块的参数是一种或多种异常类型,例如System.Net.WebException:

try {
$wc = new-object System.Net.WebClient
$wc.DownloadFile("http://www.contoso.com/MyDoc.doc")
} catch [System.Net.WebException], [System.IO.IOException] {
"Unable to download MyDoc.doc from http://www.contoso.com."
} catch {
"An error occurred that could not be resolved."
}

说这只是为了水平。

现在,我们通常会看到这些类型已经过硬编码,但是您想将catch块中的类型动态分配为变量:
try {
...
} catch $exceptionType {
catchError
}

问题是catch需要后面跟一个异常类型而不是变量。该变量将是RuntimeType类型(如果它承载异常类型)。您可以尝试使用GetType()或类似的方法将异常类型排除在变量之外。网络,它就是行不通的。

在脚本函数中放一个通用的catch块(无类型),然后将值传递给catch函数,然后在其中执行分支逻辑即可。
try { ... } catch { catchError -Command $command -Exception $_ }

而且,如果您不想传递整个异常对象,则可以使用...
$_.FullyQualifiedErrorId

关于powershell - 如何使用变量存储catch block 的错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com