我在以前的文章中已经说过,编写具有量产品质的PowerShell函数需要考虑三个要素:输入、输出和错误。我在上一篇文章中讨论了程序的参数(输入部分)。现在我们来研究一下无疑是最重要的要素—错误处理。 简而言之,如果你不学习处理错误,你就无法做出具有量产品质的函数。
如果不考虑错误状态,当出现问题的时候,你的用户将会面临一个非常糟糕的处境。 错误管理可以分为三个部分:监测、错误的详细信息以及处理。让我们先来看看如何监测错误状态。 PowerShell为监测错误状态提供了三个变量: $lastexitcode—该变量包含了本地命令(比如ping.exe)的退出码。
……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
我在以前的文章中已经说过,编写具有量产品质的PowerShell函数需要考虑三个要素:输入、输出和错误。我在上一篇文章中讨论了程序的参数(输入部分)。现在我们来研究一下无疑是最重要的要素---错误处理。
简而言之,如果你不学习处理错误,你就无法做出具有量产品质的函数。如果不考虑错误状态,当出现问题的时候,你的用户将会面临一个非常糟糕的处境。
错误管理可以分为三个部分:监测、错误的详细信息以及处理。让我们先来看看如何监测错误状态。
PowerShell为监测错误状态提供了三个变量:
$lastexitcode---该变量包含了本地命令(比如ping.exe)的退出码。这个变量对于确定外部命令是否正确执行比较有用。
$? ---对于每个PowerShell命令(函数、脚本、内建指令段)来说,变量有两个取值:$true或者$false。如果该命令成功完成的话,PowerShell就把它设置成$true;否则就把它设置成$false。
$ErrorActionPreference(简称‘ea’)--- 当发生错误的时候,PowerShell用这个变量来确定应该采取哪种行动。其有效的变量取值如下所示:
- ? Continue (默认值)---显示错误,但是继续处理
- ? SilentlyContinue ---不显示错误并继续处理
- ? Stop ---显示错误并停止处理
- ? Inquire ---显示错误,并提示用户采取行动
现在我们可以监测一个错误是否已经发生,下面我们需要搞清楚什么地方出错。
$error ---这是迄今为止拥有最多信息数量的对象,因为它包含了与错误有关的大部分数据。需要大家注意的重点是:$error实际上一个对象,这意味着它具有属性、方法,甚至类型---就像所有其他对象一样。把$error 输送到get-member后你可以看到这些信息。
图1. 输送到get-member的$error对象
从图中你可以看出,存在着大量信息。下面列出的是最重要的数据:
- ? ErrorDetails ---提供错误的详细信息(通常是空的)
- ? Exceptions --监测出来的实际额外情况
- ? TargetObject ---错误发生时操作执行所涉及的对象
- ? InvocationInfo ---包含了运行命令的详细信息(比如行数,内建指令以及位置等)
处理错误的时候有两个选择:
? Trap ---这是一个关键字,在某种意义上说,其行为像一个函数。当终止错误发生的时候它会指定一些需要运行的声明。
实例:
trap [Exception]
{
"Whoops… something broke!"
}
? Try/Catch ---这是一段代码的包装,基本原理为:“试试这个,如果失败了,再试试那个。”
实例:
Try
{
Do something….
Do more…
<something breaks here>
This code doesn't run
}
catch
{
"Whoops… something broke!"
}
错误处理是一门重要的艺术,但是想要有效地做到这一点,你得需要练习。你现在有了处理这个问题的基本工具,当然,还有很多东西需要学习。下面的几个链接可以协助你学习错误处理的全部内容,这些链接有我自己的博客,也有微软网站上的文章。
这里面的道道深着呢!
相关推荐
-
管理员常用Windows PowerShell命令Top25
即使Windows PowerShell已经由来已久,但很多管理员并不愿意主动熟悉PowerShell cmdlet命令行。随着微软扩展了PowerShell的功能,管理员应该对其功能及使用烂熟于心……
-
巧用PowerShell参数防止操作失误
使用PowerShell自动化操作可以帮助你节省大量的时间——或产生问题。幸运的是,巧用PowerShell参数可以防止发生更改脚本意外。
-
Windows Server 2012 R2下如何处理磁盘故障
Windows管理员可以通过Event Viewer日志、Server Manager报告、SCOM的警告对话框或者Windows PowerShell查询等确定Windows Server 2012 R2中的磁盘故障。
-
Windows Server 2016软件定义存储:Storage Spaces Direct介绍
微软在Windows Server 2016 Technical Preview 2中引入了Storage Spaces Direct。这个特性将本地存储扩展为高可用(HA)存储系统。