Powershell 定义容错度


Powershell拥有非常强大的容错度。只要你设定好参数,即使某一条,某一行命令执行发生错误,脚本还可以继续执行。例如你在复制一大批文件,大概需要一天时间,在你执行脚本时,你去做其它事情,结果异常发生了,如果脚本不继续执行,那当你一天以后去看结果,还可能有90%的文件没有拷贝,那么这一天的时间就白白浪费了。但是如果脚本出错了继续执行,结果可能就完成了99.99%的工作,只剩下一个文件需要重新拷贝,明显提高了效率。

Remove-Item mossfly.com ; Write-Host "工作完成"
Remove-Item : 找不到路径“E:mossfly.com”,因为该路径不存在。
所在位置 行:1 字符: 4
+ del <<<< mossfly.com ; Write-Host "工作完成"
+ CategoryInfo : ObjectNotFound: (E:mossfly.com:String) [Remove-Item], ItemNotFoundE
xception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

第二条命令没有执行,因为执行发生错误。

自动化变量$ErrorView的默认值为:NormalView,如果将$ErrorView设置为categoryview 异常就会只显示一行,看起来更加清爽,适合专业人士应用奥!

$ErrorView
NormalView
$ErrorView="categoryview"
Remove-Item www.mossfly.com
ObjectNotFound: (E:www.mossfly.com:String) [Remove-Item], ItemNotFoundException

不过,Powershell在执行某条命令是也可以指定对错误的处理模式。那就是ErrorAction。

Remove-Item "No this file" -ErrorAction "Continue" ; Write-Host "工作已经完成。"
Remove-Item : 找不到路径“E:No this file”,因为该路径不存在。
所在位置 行:1 字符: 12
+ Remove-Item <<<< "No this file" -ErrorAction "Continue" ; Write-Host "工作已经完成。"
+ CategoryInfo : ObjectNotFound: (E:No this file:String) [Remove-Item], ItemNotFound
Exception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

工作已经完成。

如果将ErrorAction的值设置为默认值Stop,发生错误下面的命令就会终止。

Remove-Item "No this file" -ErrorAction "Stop" ; Write-Host "工作已经完成。"
Remove-Item : 找不到路径“E:No this file”,因为该路径不存在。
所在位置 行:1 字符: 12
+ Remove-Item <<<< "No this file" -ErrorAction "Stop" ; Write-Host "工作已经完成。"
+ CategoryInfo : ObjectNotFound: (E:No this file:String) [Remove-Item], ItemNotFound
Exception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

每次执行命令都去设定ErrorAction那也忒麻烦了。有没有全局的设置呢,那就是$ErrorActionPreference,甚至还可以针对某段函数,某个脚本设置$ErrorActionPreference。

Member name Description
Continue 将错误抛出来,但是脚本会继续往下执行。
Ignore 直接忽略错误,貌似在Powershell 2.0中已经没有了
Inquire 提供选项由用户选择Error Action。
SilentlyContinue 错误不抛出,脚本也会继续执行。
Stop 错误发生时,终止脚本执行
本文链接: https://www.pstips.net/powershell-define-fault-tolerance.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注