PowerShell脚本trap语句捕获异常写法实例
先看一个脚本文件: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: Try...Catch...Finally 实现方法
复制代码 代码如下: function Try { param ( [ScriptBlock]$Command = $(throw "The parameter -Command is required."), [ScriptBlock]$Catch = { throw $_ }, [ScriptBlock]$Finally = {} ) &$Finally
-
PowerShell中使用Out-String命令把对象转换成字符串输出的例子
本文介绍在PowerShell中如何将cmdlet输出的对象,转换为string字符串类型,便于后期的处理. PowerShell中的cmdlet输出的结果都是以对象(Object)的形式存在的.对于Object类型,在后期处理时有利有弊,当然利大于弊.但某些时候,我们希望cmdlet输出的结果直接是字符串,那应该怎么来实现呢? PowerShell中提供了一个Out-String的cmdlet,来看看它的介绍:Out-String cmdlet 将 Windows PowerShell 管理的
-
PowerShell小技巧之True和False的类型转换
在条件判断时,离不开$True和$False,将其它类型转换成Bool类型时,有几点需要留意: 其它类型转换成布尔类型 PS> 0,1,-1,'0','1','true','false',$null | foreach { [bool]$_ } False True True True True True True False 总结:只有整数0和Null才能转换成False,其它都会被强制类型转换成True 布尔类型转换成字符串 复制代码 代码如下: PS> $true,$false | fo
-
shell实现tr删除替换详解
tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换. 语法:tr [–c/d/s/t] [SET1] [SET2] #SET1: 字符集1:SET2:字符集2 -c:complement,用SET2替换除SET1以外的字符. -d:delete,删除SET1中所有的字符,不转换. -s:squeeze-repeats,压缩SET1中重复的字符. -t:truncate-se
-
Stream、WshShell、WshUrlShortcut对象及Shell.Application的参数与使用
Kafree收集整理 来源:论坛转载无法确定出处,如有版权问题请与我们联系 1.Stream对象 组件:"Adodb.Stream" 有下列方法: Cancel 方法 使用方法如下 Object.Cancel 说明:取消执行挂起的异步 Execute 或 Open 方法的调用. Close 方法 使用方法如下 Object.Close :关闭对像 CopyTo 方法 使用方法如下 Object.CopyTo(destStream,[CharNum
-
PowerShell脚本trap语句捕获异常写法实例
先看一个脚本文件:3.three.test.ps1 复制代码 代码如下: Get-FanBingbing #命令不存在 然后这样捕获: 复制代码 代码如下: trap [exception] { '在trap中捕获到脚本异常' $_.Exception.Message continue } .\3.three.test.ps1 异常捕获成功,输出: 复制代码 代码如下: 在trap中捕获到脚本异常 The term 'Get-FanBingbing' is not recognized a
-
PowerShell脚本监控文件夹变化实例
本文介绍使用PowerShell来监视一个指定的文件夹,包括新建文件.删除文件.重命名文件等操作均会被监控或监视.本文使用了System.IO.FileSystemWatcher这个.NET对象.首先,我们来看看程序: 复制代码 代码如下: # 定义要监控的文件夹,这个文件夹必须先存在. $folder = 'D:\test' # 定义每次监控的间隔时间,这时定义为1000毫秒,即1秒 $timeout = 1000 # 创建文件系统监视对象 $FileSystemWatcher = New-O
-
PowerShell脚本写的文件.ps1文件介绍
.ps1文件是PowerShell写好的脚本文件.在Windows系统中,默认情况下是不允许执行.ps1文件的,那么怎么才能让系统允许执行.ps1文件呢? 什么是".ps1"文件? 这个是PowerShell写的脚本文本,你可以在记事本中写一段PowerShell代码,然后将其保存为"xxx.ps1",后面要使用它的时候,双击即可运行了.这有点像批处理的".bat"文件,也有点像VBScript的".vbs"文件.这些都是Wi
-
使用HTTP api简单的远程执行PowerShell脚本
可能有些情况下,你不想完全体验通过PSRP(PowerShell远程处理协议)远程管理,或有需要从非Windows系统上执行一些PowerShell脚本.你可能会像我很久之前在这篇文章中写的那样直接基于WS-Man来写代码.但是那样很复杂,并且需要WS-Man和SOAP的一些知识. 我在PowerShell脚本中使用.Net HttpListener类写了个HTTP监听器.你可以非常简单地启动一个监听器的实例(需要提升权限监听网络),现在你可以执行任意的PowerShell命令了,它还可以返回多
-
mybatis一对多两种mapper写法实例
mybatis一对多两种mapper写法 第一种 <resultMap type="com.example.demo.model.TuserModel" id="extendMapper"> <id column="id" property="id" /> <result column="user_name" property="userName" />
-
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
login.onclick = function(){ var xhr = new XMLHttpRequest(); xhr.open("get","http://localhost/ajax2/test2.php?username="+username.value+"&pwd="+pwd2.value,true); xhr.send(); xhr.onreadystatechange = function(){ if (xhr.rea
-
Powershell 脚本数字签名实现方法
脚本很容易被冒名顶替或者更改,因为它们是由纯文本构成的.数字签名为脚本提供了更高的安全性,因为它能确定脚本和脚本的编辑者的唯一性,并且不能被更改.作为脚本的发布者,你能确定你的脚本没有被恶意篡改.即使专家也无能为力,因为这种机制是基于复杂逻辑的.幸运的是,在实际应用中,你不需要深究这些细节,只需要掌握Powershell脚本签名的机制和过程. 准备一个合适的证书 因为不能使用传统的纸质签名给Powershell脚本进行签名,你需要另一个工具"证书".证书就像一把私有并且安全的钥匙.证书
-
shell脚本一键安装php7的实例(推荐)
如下所示: #!/bin/bash php_gz_file='/home/php/Downloads/source/php-7.0.0.tar.bz2' tar_dir='/home/php/Downloads/dst/' source_dir='php-7.0.0' cd $tar_dir rm -rf $source_dir echo '===start tar php ========' tar -jxvf $php_gz_file > /dev/null echo '===end tar
-
在cmd中直接运行PowerShell脚本文件的方法
以前在cmd中执行powershell,我们都是这样: 复制代码 代码如下: PowerShell.exe -file a.ps1 现在想在cmd中这样执行: 复制代码 代码如下: a.ps1 此时需要将Powershell脚本的默认打开方式选择为Powershell.exe,可以鼠标右键操作. 也可以使用下面的cmd以管理员权限打开,然后运行命令: 复制代码 代码如下: ftype Microsoft.Powershellscript.1="%SystemRoot%\system32\wind
-
BaseJDBC和CRUDDAO的写法实例代码
我们首先看下BASEJDBC的写法实例: package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mysql.jdbc.Driver; public class BaseJDBC { // 表示你要操作的是哪种类型
随机推荐
- jquery ajax请求方式与提示用户正在处理请稍等
- 使用纯HTML的通用数据管理和服务
- 把Lua函数传递到C/C++中实例
- Java concurrency之AtomicReference原子类_动力节点Java学院整理
- JAVA技术实现上传下载文件到FTP服务器(完整)
- 深入浅析ES6 Class 中的 super 关键字
- PHP实现可自定义样式的分页类
- php 取得瑞年与平年的天数的代码
- Javascript之Date对象详解
- mysql中向表中某字段追加字符串的方法
- js使用html2canvas实现屏幕截取的示例代码
- Python中标准库OS的常用方法总结大全
- Android给app设置自定义铃声功能
- 《成功与失败》其实是你和自己的战争
- C#计算两个时间差的方法代码分享
- 动态创建script在IE中缓存js文件时导致编码的解决方法
- 通过Class类获取对象(实例讲解)
- JavaScript设计模式初探
- Java使用File类遍历目录及文件实例代码
- SSH框架网上商城项目第12战之添加和更新商品功能