Powershell小技巧之捕获脚本内部的异常
先看一个脚本文件: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函数中把参数传入另一个函数的函数传参例子
这篇文章主要介绍了PowerShell函数中把参数传入另一个函数例子也是使用的PSBoundParameters,但是有区别哦,,需要的朋友可以参考下2014-07-07PowerShell Out-File向只读文件写入内容的方法
这篇文章主要介绍了PowerShell Out-File向只读文件写入内容的方法,只需要加一个-Force参数即可,需要的朋友可以参考下2014-08-08windows Powershell 快速编辑模式和标准模式
powershell控制台有两种模式,一个是快速编辑模式,一个是标准模式。2014-08-08PowerShell中使用Out-String命令把对象转换成字符串输出的例子
这篇文章主要介绍了PowerShell中使用Out-String命令把对象转换成字符串输出的例子,即把对象转为字符串的方法,需要的朋友可以参考下2014-08-08
最新评论