PowerShell 异常处理

PowerShell 中的异常处理

PowerShell 的异常种类

终止型错误 Terminating Error

此类错误可以被 try { } catch { } 语句捕获到,并可以从 $PSItem 对象取得错误信息,类似编程语言的 Exception

非终止型错误 Non-Terminating Error

此类错误不能被 try { } catch { } 语句捕获到,因为它将错误信息输出到了终端的 标准输出,具体表现就是在终端里会看见一段错误文本。

-ErrorAction

这个选项是用于改变非终止型错误的行为的,默认是Continue,表示出错时,继续执行后续的命令,它的值有以下几种:

  • Continue : 显示错误信息并继续执行后面的命令,这是默认值。
  • Ignore : 这个值是在 PowerShell 3.0 引入的。它不显示错误信息并继续执行后面的命令。与 SilentlyContinue 不同的是,它也不会把错误信息添加到 $Error 变量中。
  • Inquire : 显示错误信息并弹框与用户交互。
  • SilentlyContinue : 不显示错误信息并继续执行后面的命令。
  • Stop : 显示错误信息并且退出脚本的执行。
  • Suspend : 这个值只适用于 workflow。当 terminating error 发生时执行会暂停下来,然后决定是否恢复执行。

$ErrorActionPreference

这个环境变量是 -ErrorAction 的全局设置

如何判断脚本或者命令出错了?

处理终止型错误 Terminating Error

可以通过 try {} catch {} 捕获,并通过 Exit 方法中断脚本执行,如 Exit 1 (脚本成功执行返回值是 0)

处理非终止型错误 Non-Terminating Error

第一种:通过更改 -ErrorAction$ErrorActionPreferenceStop 来自动中断执行

第二种:通过判断 $? 的值为 True 还是 False 来处理

需要错误处理的常见场景

  • CI 管道执行时,命令失败了,但是管道却成功了,所以我们需要对出错的命令进行异常处理,从而时管道终止