如果发生错误,请停止foreach

时间:2015-04-21 19:03:07

标签: powershell

$_为5时,以下powershell脚本将迭代0到10甚至引发异常。这是一种在出现错误时停止执行的方法吗?我只是用1/0来说明。

0..10 | % { 
  echo $_ 
  if ($_ -eq 5) { 1/0 } # It will be some complex scripts which may raise error here
}

4 个答案:

答案 0 :(得分:3)

$ErrorActionPreference设为Stop而不是Continue

您可以将其范围扩展到您想要的任何范围。

许多命令使用-ErrorAction参数来控制它,而不需要设置变量(这可能适用于您实际正在做的但不适用于该示例)。

答案 1 :(得分:1)

Etan Reisner将 $ ErrorActionPreference 设置为停止$ErrorActionPreference = 'stop')的解决方案将起作用。但是,如果您不想要更改影响其他代码来回的全局首选项变量, try {} catch {} 将会执行此操作。假设您想知道哪个错误停止了管道,您应该让 catch {} 块重新抛出捕获的错误,否则管道将会静默停止。

以下任何一项都可以使用,具体取决于你想要了解代码的哪些部分会阻止它们抛出错误的管道:

<强> 1

0..10 | % {
  echo $_
  if ($_ -eq 5) { 
    try {
      1/0
    } catch {throw $_} 
  }
}

<强> 2

0..10 | % {
  echo $_
  try {
    if ($_ -eq 5) {
      1/0
    }
  } catch {throw $_} 
}

第3

try {
  0..10 | % {
    echo $_
    if ($_ -eq 5) {
      1/0 
    }
  }
} catch {throw $_}

答案 2 :(得分:0)

将其包含在try { ... } catch {}中,虽然我不确定它是最好的方式。

答案 3 :(得分:0)

0..10 | % { 
  echo $_ 
  if ($_ -eq 5) 
  {
    Break
  }
}