当$_
为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
}
答案 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
}
}