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 }
Cmdlet开发与学习(一)