Powershell – 异常处理

大标 2022年3月16日11:24:52
评论
19

第一种 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

 

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
大标
  • 本文由 发表于 2022年3月16日11:24:52
  • 转载请务必保留本文链接:https://www.tanhuibiao.com/script/fuwuqi/4493.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: