首页 > 代码库 > Cmdlet开发与学习(一)

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,使用CmdletAttribute设置该类的属性,而CmdletAttribute是所有cmdlet都必须添加的Attribute。

       要使用CmdletAttribute,就必须引用dll:System.Management.Automation.dll。正常情况下,在程序集里查询是找不到的,需要到GAC中查到。一般情况下,路径为:C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll。 添加Using之后的代码显示为:      

1     [Cmdlet(VerbsCommon.Get,"SQLServerBackupFile")]
2     public class GetSQLServerBackup
3     {
4     }

       在这里需要强调的是,cmdlet的命名规则遵循动名词的形式,即动词-名词的结构。不仅如此,为了更好的规范和统一cmdlet,MS建议自定义cmdlet的动词都是来自于它提供的Verb类(VerbsCommon, VerbsCommunications, VerbsData, VerbsDiagnostic, VerbsLifeCycle, VerbsSecurity, VerbsOther)中定义的词,并且最好不要使用同义词。而名词部分,则最好是避免大众化,和其它命令混淆,一般是详细描述主要功能的组合词语。整个动名词的结构采用Pascal大小写。当然,CmdletAttribute的参数不仅仅如此,更为详尽的解析将在后文中描述。

 

        2.继承自类PSCmdlet或者Cmdlet

        Windows PowerShell 支持从以下两个不同基类派生的 Cmdlet:PSCmdlet 和 Cmdlet。

        从 PSCmdlet 派生的 Cmdlet 允许您访问 Windows PowerShell 运行时。它允许调用其他脚本,并允许访问 Windows PowerShell 提供程序以使用会话状态。PSCmdlet 还提供对 Windows PowerShell 日志记录功能的访问权,不过此访问会导致规模变大,并且会让您依赖 Windows PowerShell 运行时。

        从 Cmdlet 类派生的 Cmdlet 只提供对 Windows PowerShell 运行时的最少依赖关系。其优点是:由于具有较少的功能,这些 Cmdlet 会小一些,并且也将减小因 Windows PowerShell 随着时间推移发生变化而引起问题的可能性。此外,可以很轻松地将这些 Cmdlet 包含到没有 Windows PowerShell 运行时的其他应用程序中。

        以上是网上对PSCmdlet和Cmdlet的区别对比,大致意思如此。我选择了PSCmdlet最为基类。

        

1     [Cmdlet(VerbsCommon.Get,"SQLServerBackupFile")]
2     public class GetSQLServerBackup : PSCmdlet
3     {
4     }