Cmdlet开发与学习(三)

5.流程或诊断信息输出,错误以及异常处理

   
  
在使用PowerShell的过程中,如果cmdlet执行有输出结果,我们会在PS界面看到结果输出信息。如果cmdlet执行出现异常,那我们就会看到异常信息。接着我们就开始学习这些输出信息的实现。

Cmdlet基类给我们提供了几种输出方法:WriteDebug, WriteError,
WriteObject, WriteProcess, WriteVerbose, WriteWarning。

WriteDebug:该方法是为cmdlet开发人员输出Debug信息的,用来诊断问题,问题排除的。

WriteError:在cmdlet执行的过程中,可能会出现某些不影响整个命令执行的错误,比如删除指定文件夹里面的所有文件,一个文件的删除失败,是不会对整个cmdlet的执行结果产生影响的,但是既然是有错误,就需要输出出来,告知使用者错误信息。这个时候,就使用WriteError。

WriteObject:cmdlet的执行需要输出,比如,查询指定文件夹里面所有的txt文件,使用WriteObject方法输出。

WriteProcess:有时候一条cmdlet的执行是需要很长时间的,如果界面什么都没有,总会给使用者一种错误,命令hang住了。WriteProcess可以生成进度记录,类似进度条的效果,告知使用者当前命令正在执行。

WriteVerbose:如果需要生成一般用户级别的信息,比如,告知使用者当前命令已经执行到哪一步,整个流程是怎样的,使用WriteVerbose。

WriteWarning:生成Warning警告信息,但是默认情况下,警告信息输出是被抛弃了的。

注意:以上输出仅能在方法BeginProcessing,ProcessRecord,EndProcessing中使用。如果在这3个方法之外使用,会抛出InvalidOperationException异常。

下面我们使用WriteObject生成管道输出。


 1     [Cmdlet(VerbsCommon.Get,"SQLServerBackupFile")]
2 public class GetSQLServerBackup : PSCmdlet
3 {
4 private string path;
5
6 [Parameter]
7 public string Path
8 {
9 get { return path; }
10 set { path = value; }
11 }
12
13 protected override void ProcessRecord()
14 {
15 if (Directory.Exists(path))
16 {
17 string[] files = Directory.GetFiles(path);
18 foreach (string itemFile in files)
19 {
20 FileInfo tempInfo = new FileInfo(itemFile);
21 if (tempInfo.Extension.Equals(".bak", StringComparison.OrdinalIgnoreCase))
22 {
23 WriteObject(tempInfo);
24 }
25 }
26 }
27 }
28 }

6.cmdlet帮助文档

cmdlet开发最后一步,也是最重要的一步,就是编写帮助文档,这样客户可以通过get-help cmdlet很好地了解其用法。

PowerShell已经提供了标准的帮助文档模板,因此,cmdlet开发人员只需要关注内容。

7.PSSnapIn和Module

      PSSnapIn是PowerShell
1.0的产物,而Module是PowerShell 2.0才有的。当然,你也可以在PS 2.0中使用PSSnapIn。

目前看来,Module应该是更受MS青睐,在之后的PS版本中,Module的功能越来越丰富。

关于SnapIn和Module的使用,参考:http://technet.microsoft.com/en-us/library/dd745031(v=VS.85).aspx

既然我们已经写好了Cmdlet命令,那么接着就是看看具体的效果了。

简单的方法,是将我们的cmdlet dll导入进PS中。

时间: 2024-08-05 11:14:18

Cmdlet开发与学习(三)的相关文章

Cmdlet开发与学习(二)

继续上一篇的内容,既然已经定义好了命令,那么我们还可以参数绑定,定义自己的参数对象. 3.定义属性,即cmdlet参数对象       参数绑定时基于cmdlet元数据进行的,cmdlet元数据是在命令发现过程中得到的.首先,基于cmdlet的类型(包括可执行程序,脚本文件,内置函数等),PowerShell实例化一个cmdlet.然后,通过查询cmdlet元数据中的参数信息,判断参数列表是否合法,或者,该命令参数是否需要参数值. 参数绑定的实现相当简单,只需要对属性加上Parameter标示符

Cmdlet开发与学习(四)

前面讲完了一个基本的cmdlet的开发流程,下面将陆续地完善cmdlet的功能细节以及补充.       支持ShouldProcess       有的cmdlet操作有很大的破坏性,因此有必要再命令执行前提醒用户注意一些可能的执行后果,也就是说,存在与用户的交互.这个时候,通过使用ShouldProcess,可以达到预期的效果. 1 [Cmdlet(VerbsCommon.Get,"SQLServerBackupFile", 2 SupportsShouldProcess = tr

Cmdlet开发与学习(六)

之前的内容主要是关于cmdlet开发的,下面要将的内容,是关于在应用程序中集成PowerShell引擎. 运行空间和管道       Runspace类是PowerShell引擎API的重要组成部分,Runspace实例代表一个PowerShell执行引擎实例,其中包含自己的一系列变量,驱动器映射,函数等.这些资源统称为运行空间的"会话状态". 创建并调用Pipeline类的实例,我们就可以在运行空间中使用命令行.Pipeline类实例代表PowerShell命令行对象,其中包含各种命

Cmdlet开发与学习(五)

Parameter       在声明cmdlet参数的时候,我们使用了Parameter标识符,在这个标识符中,有些参数需要了解到. 强制参数 设置Mandatory=true即可. 对于强制参数,不管是在命令行中绑定,还是通过管道输入,在命令逻辑执行之前,它就必须绑定好.如果强制参数没有参数值的话,PowerShell会弹出对话框,要求用户提供参数值. 位置参数.       Position= n       有时,我们在使用Powershell的时候,发现仅仅是输入参数值,并没有指定具体

Cmdlet开发与学习(一)

Windows Powershell和cmdlet的学习是一个积累的过程.最近在学习编写自定义的Cmdlet封装一些命令,以此记录自己的学习心得. 自定义cmdlet的实现大致可以分为以下几步: 1.将.Net类声明为cmdlet 2.继承自类PSCmdlet或者Cmdlet 3.定义属性,即cmdlet参数对象 4.重写cmdlet记录处理的方法 5.流程或诊断信息输出,错误以及异常处理 6.PSSnapIn和Module 1.将.Net类声明为cmdlet        要将.Net类声明为

Cmdlet开发与学习(七)

到目前的例子为止,我们使用的都是不带参数的CreateRunspace()方法创建的运行空间实例,这就意味着,我们使用的都是默认的命令集合,提供程序,初始化脚本和格式信息. 但是,这些默认的配置信息都是可以控制的,这要通过RunspaceConfiguration类实现.RunspaceConfiguration类是CreateRunspace函数的参数.创建运行空间实例后,其中的会话状态变量可以通过运行空间实例的SessionStateProxy来设置和获取. 注意:如果运行空间处于Befor

ios开发网络学习三:NSURLConnection小文件大文件下载

一:小文件下载 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> /** 注释 */ @property (nonatomic, strong) NSMutableData *fileData; @property (nonatomic, assign) NSInteger totalSize; @property (weak, nonatomic) IB

ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎. Razor在减少代码冗余.增强代码可读性和Visual Studio智能感知方面,都有着突出的优势.Razor一经推出就深受广大ASP.Net开发者的喜爱. 1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分

Beaglebone Back学习三(开发环境搭建)

开发环境搭建 1 Ubuntu环境搭建 2 Window环境搭建 3 开发板环境搭建 1 Ubuntu环境搭建 (1)安装必要的网络工具 samba nfs tftp vmware-tools samba nfs apt-get install nfs-kernel-server vim  /etc/exports  (/path/to/nfs  *(rw,sync,no_root_squash) ) /etc/init.d/nfs-kernel-server restart (2)配置通信网络