PowerShell脚本trap语句捕获异常写法实例
2014-07-02 09:12
561 查看
先看一个脚本文件:3.three.test.ps1
Get-FanBingbing #命令不存在
然后这样捕获:
复制代码 代码如下:
trap [exception]
{
'在trap中捕获到脚本异常'
$_.Exception.Message
continue
}
.\3.three.test.ps1
异常捕获成功,输出:
复制代码 代码如下: 在trap中捕获到脚本异常
The term 'Get-FanBingbing' is not recognized as the name of a cmdlet
接下来我把3.three.test.ps1脚本文件的内容改成:
复制代码 代码如下: dir D:\ShenMaDoushiFuYun #目录不存在
再运行,这时没有捕获到异常,错误为:dir : Cannot find path ‘D:\ShenMaDoushiFuYun' because it does not exist.
于是我想是不是因为终止错误与非终止错误的区别:所以还写了try catch捕获语句,双管齐下:
trap [exception]
{
'在trap中捕获到脚本异常'
$_.Exception.Message
continue
}
try{
.\3.three.test.ps1
}
catch{
'在catch中捕获到脚本异常'
$_.Exception.Message
}
异常仍旧:dir : Cannot find path ‘D:\ShenMaDoushiFuYun' because it does not exist.
看来问题不在这里。事实上是ErrorActionReference的问题,这样改就OK啦:
trap [exception]
{
'在trap中捕获到脚本异常'
$_.Exception.Message
continue
}
$ErrorActionPreference='stop'
.\3.three.test.ps1
输出为:
复制代码 代码如下:
在trap中捕获到脚本异常
Cannot find path 'D:\ShenMaDoushiFuYun' because it does not exist.
简单分析:
像Get-FanBingbing这样的异常,是因为命令不存在,确切来讲属于语法错误,级别比较高被trap到了。但是像目录找不到这样的异常,相对而言级别比较低,默认不能捕获到,除非显示指定ErrorAction为stop。
您可能感兴趣的文章:
相关文章推荐
- Powershell小技巧之捕获脚本内部的异常
- shell脚本实例 使用exit语句和if
- .“在JAVA中,异常子类必须在它们任何父类之前使用,因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,后面运行子类的catch语句将永远不会到达。而且,Java中不能到达的代码是一个错误。”
- JS异常处理try..catch语句的作用和实例
- C# WinForm捕获未处理的异常实例解析
- .NET 异常捕获机制的小技巧应用(实例:端口扫描程序)
- erlang进程trap_exit捕获异常退出
- Oracle数据库案例整理-执行Oracle脚本失败或异常-使用SQL语句插入中文后数据库中显示乱码
- EXPLAIN语句对于MySQLdb捕获异常的影响
- 所有的异常都要使用try catch 语句捕获?
- powerdesigner中去掉Oracle生成的SQL创建语句中的双引号后再次生成sql的脚本导入数据库中产生的异常问题
- select into 语句,最好加上异常捕获
- shell 脚本if语句嵌套实例
- delphi异常捕获try except语句 和 try finally语句用法
- 捕获异常语句try..catch..finally..
- 数学函数的异常捕获——Ada应用实例之十
- MySql捕获sql语句异常的方法
- 第04章 异常处理 05 异常的捕获和处理 finally语句
- if嵌套语句 shell脚本实例 测试是否闰年
- 捕获全局异常,访问https协议的写法