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 }

Cmdlet开发与学习(一)

时间: 2024-10-11 19:44:31

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

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开发与学习(二)

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

Cmdlet开发与学习(三)

5.流程或诊断信息输出,错误以及异常处理       在使用PowerShell的过程中,如果cmdlet执行有输出结果,我们会在PS界面看到结果输出信息.如果cmdlet执行出现异常,那我们就会看到异常信息.接着我们就开始学习这些输出信息的实现. Cmdlet基类给我们提供了几种输出方法:WriteDebug, WriteError, WriteObject, WriteProcess, WriteVerbose, WriteWarning. WriteDebug:该方法是为cmdlet开发人

Cmdlet开发与学习(七)

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

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

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术

前端开发知识学习概要

前端开发工具 编辑器 editPlus sublime 浏览器: Chrome Safari Firebox IE 插件:firebug chrome: inspect element html 组成结构 1 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前,不是 HTML 标签: 2 它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令, 浏览器读取. 3 <html> 4 <head> 5 描述页面

(转)嵌入式开发如何学习

一般来说,在嵌入式行业中从事嵌入式产品研发的人往往来自这样一些专业:计算机.电气,自动化,微电子,电子信息,通信,机械等相关专业,由于大学里面不同专业基础课的设置,所以在准备学习的过程中需要根据实际情况有不同的侧重. 一是程序设计的基础,例如:基本的编程语言基础,至少对数据类型.程序的结构及流程控制等最基本的内容要相当清楚,所以建议恶补一下C语言,呵呵!另外有不少同学都问到数据结构的基础,我一直认为数据结构和算法的学习是帮助形成程序设计逻辑思维的很好训练方式,对于程序员的长期专业素养的提高一定有