Windows PowerShell的错误处理

日期: 2010-09-14 作者:Brandon Shell翻译:Dan 来源:TechTarget中国 英文

我在以前的文章中已经说过,编写具有量产品质的PowerShell函数需要考虑三个要素:输入、输出和错误。我在上一篇文章中讨论了程序的参数(输入部分)。现在我们来研究一下无疑是最重要的要素—错误处理。   简而言之,如果你不学习处理错误,你就无法做出具有量产品质的函数。

如果不考虑错误状态,当出现问题的时候,你的用户将会面临一个非常糟糕的处境。   错误管理可以分为三个部分:监测、错误的详细信息以及处理。让我们先来看看如何监测错误状态。 PowerShell为监测错误状态提供了三个变量:   $lastexitcode—该变量包含了本地命令(比如ping.exe)的退出码。

……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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后你可以看到这些信息。

Windows PowerShell,错误处理
图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!"
   }

  错误处理是一门重要的艺术,但是想要有效地做到这一点,你得需要练习。你现在有了处理这个问题的基本工具,当然,还有很多东西需要学习。下面的几个链接可以协助你学习错误处理的全部内容,这些链接有我自己的博客,也有微软网站上的文章。

  这里面的道道深着呢!

相关推荐