Powershell - 异常处理
第一种 erminating Errors 使用方式:Try 和 catch
对于默认的powershell脚本如果出现错误是会跳过错误继续执行下面的脚本,这样会产生一些问题,比下图
脚本
# 下面的命令不存在 Get-TerminatingError Write-Host 'hello world'
运行结果
PS C:\windows\system32> # 下面的命令不存在 Get-TerminatingError Write-Host 'hello world' Get-TerminatingError : The term 'Get-TerminatingError' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:2 char:1 + Get-TerminatingError + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Get-TerminatingError:String) [] , CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException hello world
注意最后输出的 "hello world",虽然执行过程中出现了错误,但是错误后面的代码依然被执行了。
将脚本修改如下
Try{ # 下面的命令不存在 Get-TerminatingError } Catch{ Write-Host 'got you' exit 1 } Write-Host 'hello world'
运行结果
因为有了错误判断,代码在出现错误后不会继续执行
第二种 ErrorAction
选项的工作原理为:用指定的参数覆盖当前命令的 $ErrorActionPreference 变量。默认情况下 $ErrorActionPreference 变量的值为 Continue。
可以为 -ErrorAction 选项指定下面的参数:
-ErrorAction[:{Continue | Ignore | Inquire | SilentlyContinue | Stop | Suspend }]
它们表示的含义如下:
Continue 显示错误信息并继续执行后面的命令,这是默认值。
Ignore 这个值是在 PowerShell 3.0 引入的。它不显示错误信息并继续执行后面的命令。与 SilentlyContinue 不同的是,它也不会把错误信息添加到 $Error 变量中。
Inquire 显示错误信息并弹框与用户交互。
SilentlyContinue 不显示错误信息并继续执行后面的命令。
Stop 显示错误信息并且退出脚本的执行。
Suspend 这个值只适用于 workflow。当 terminating error 发生时执行会暂停下来,然后决定是否恢复执行。
使用方式
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
参考文档
https://www.cnblogs.com/sparkdev/p/8376747.html#:~:text=ErrorAction%20%E9%80%89%E9%A1%B9%E4%B8%BB%E8%A6%81%E7%94%A8%E6%9D%A5%E6%94%B9%E5%8F%98%E5%91%BD%E4%BB%A4%E7%9A%84%20non-terminating%20errors%20%E7%9A%84%E8%A1%8C%E4%B8%BA%28%E5%AE%83%E4%B8%8D%E4%BC%9A%E5%AF%B9%20Terminating%20Errors%20%E4%BA%A7%E7%94%9F%E5%BD%B1%E5%93%8D%29%EF%BC%81,ErrorAction%20%E9%80%89%E9%A1%B9%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E4%B8%BA%EF%BC%9A%E7%94%A8%E6%8C%87%E5%AE%9A%E7%9A%84%E5%8F%82%E6%95%B0%E8%A6%86%E7%9B%96%E5%BD%93%E5%89%8D%E5%91%BD%E4%BB%A4%E7%9A%84%20%24ErrorActionPreference%20%E5%8F%98%E9%87%8F%E3%80%82%20%E9%BB%98%E8%AE%A4%E6%83%85%E5%86%B5%E4%B8%8B%20%24ErrorActionPreference%20%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%E4%B8%BA%20Continue%E3%80%82