【问题标题】:Powershell error handling: do something if NO error occuredPowershell 错误处理:如果没有发生错误,则执行某些操作
【发布时间】:2012-05-16 20:02:01
【问题描述】:

我一直在寻找这个,但似乎找不到它。 我有一个带有 try {} catch {} 语句的脚本。如果没有发生错误,我想添加一个操作。

例如

try { something }
catch { "Error occured" }
if (!error) {
"No Error Occured"
}

如何测试语句中是否出现错误?

提前致谢

沃尔特

【问题讨论】:

  • 另一种选择是将“无错误”代码放在 try 块中的语句之后:try { something; "no error" } catch { "error" }。如果“某事”因终止错误而失败,执行将跳过“无错误”代码并进入 catch 块。 (当然,“无错误”代码本身可能会引发异常,因此这种方法并不总是合适的。)

标签: powershell try-catch


【解决方案1】:

清除后检查自动变量$error

$error.clear()
try { something }
catch { "Error occured" }
if (!$error) { "No Error Occured" }

【讨论】:

  • 太棒了!谢谢!我知道它必须很容易:)
  • 我喜欢这个解决方案,但我认为如果可以的话,创建一个变量并在相关的-ErrorVariable 参数中使用它会更好。使用全局错误堆栈并清除它感觉是一种不好的做法,或者有丢失错误的风险。
【解决方案2】:

另一种方式:

$ErrorOccured = $false

try 
{ 
   $ErrorActionPreference = 'Stop'
   ...something...
}
catch
{
   "Error occured"
   $ErrorOccured=$true
}

if(!$ErrorOccured) {"No Error Occured"}

.

【讨论】:

  • 如果您还想捕获非终止错误,请不要忘记在 try 块的头部设置 $ErrorActionPreference = 'Stop'。顺便说一句,这不会捕获从控制台 exe 返回的错误代码。
  • 谢谢@KeithHill,我会添加它。
【解决方案3】:

怎么样,

something
If ($?)
{
    "No error"
}
Else
{
    "Error"
}

这也适用于非终止错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2017-01-15
    相关资源
    最近更新 更多