【问题标题】:Try Catch not working in v2.0, though working in 4.0 [duplicate]尝试 Catch 在 v2.0 中不工作,但在 4.0 中工作 [重复]
【发布时间】:2014-12-16 04:55:12
【问题描述】:

当我将这个 sn-p 放入我的一台机器上的 powershell v2.0 时

try{
    $test = 1/0
    write-host "not terminating"
}
Catch{
    write-host "caught"
}
write-host "continuing"

错误会终止脚本并且没有捕获它并且不会继续。我得到了不能被零除的错误。

Cannot divide by zero exception message

但在我的 v4.0 中,我得到了这个输出

caught
continuing

当我将它放入我的 v4.0 powershell 时,它会捕获终止错误并继续。怎么了,这是 v2.0 特定的问题吗?如何让脚本在 powershell v2.0 中继续并捕获错误?

【问题讨论】:

  • 我得到了副本,它解释了 2.0 的行为,但它如何解决 v4 发生的问题?根据我刚刚在另一篇文章中读到的内容,我认为它们应该是相同的。

标签: powershell powershell-2.0


【解决方案1】:

尝试在您的 try 块中添加 $ErrorActionPreference = "Stop"。这会将所有错误转化为终止错误。 powershell的v2和v4之间可能存在问题,其中v4将错误定义为终止,但v2没有。 Try/catch 语句仅适用于终止错误。

如果这不起作用,请尝试编写如下内容:

try {
  $test = 1/0

  if($?) {
     write-host "not terminating"
  }

  else {
      $errors[0].Exception
  }
}

$?是一个自动变量,用于存储上次操作是否成功完成的信息。

【讨论】:

  • 我知道这是一个终止错误,因为脚本终止并且“未终止”没有得到输出,好像它没有终止它应该输出“未终止”和“继续”。尽管我会对此进行测试,无论是否有任何变化。编辑:是的,结果还是一样,这真的让我很困扰,因为微软已经记录了这个行为与实际不同。或者我没有正确理解错误处理?
  • 我测试了代码块,脚本刚刚终止,然后输出通常不能被零除的错误
  • @gzimmers 我实际上是根据其他人的说法让它工作的。只需将其更改为$test = 0 $test2 = 1/$test
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2013-07-14
相关资源
最近更新 更多