Cmdlet开发与学习(四)

前面讲完了一个基本的cmdlet的开发流程,下面将陆续地完善cmdlet的功能细节以及补充。

      支持ShouldProcess

   
  
有的cmdlet操作有很大的破坏性,因此有必要再命令执行前提醒用户注意一些可能的执行后果,也就是说,存在与用户的交互。这个时候,通过使用ShouldProcess,可以达到预期的效果。


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

查看上面的例子,为了使一个cmdlet支持ShouldProcess,需要执行下面的步骤:

1.设置cmdlet的SupportsShouldProcess属性为真,则该cmdlet就可以支持ShouldProcess

2.使用cmdlet的属性ConfirmImpact,设置cmdlet的影响确认等级。如果此属性没有设置的话,默认值是Medium

3.在cmdlet逻辑中添加新的代码,在破坏性操作执行前都调用ShouldProcess方法

具体效果如下:

更进一步说明:

ConfirmImpact

   
  
我们在使用PowerShell的时候,有时,即使没有-confirm参数,会发现cmdlet对每次操作也需要进行确认。这是怎么一回事呢?在这里,需要先介绍2个概念。

优先确认等级(Confirming Preference
Level):这是在会话变量$ConfirmPreference中设置的(默认值为High)

影响确认等级(Confirming Impact
Level):这是在cmdlet的声明中设置的(默认值为Medium)

如果影响确认等级比优先确认等级高或者相同,PowerShell就会等待确认。如果cmdlet调用时添加了-confirm参数,PowerShell就会暂时设置优先确认等级为Low。此时,只要影响确认等级不为None,PowerShell都会提示确认。

如果设置$ConfirmPreference为None,则所有与ShouldProcess有关的提示信息都将被禁止。

ShouldContinue

     
细心的开发在添加ShouldProcess方法的时候,会发现还有个ShouldContinue方法。

ShouldContinue允许cmdlet无条件进行提示确认。也就是说,此时,不论影响确认等级和优先确认等级如何,都会有确认提示。

事实上,即使不用声明SupportsShouldProcess也可以使用ShouldContinue。

Cmdlet开发与学习(四),布布扣,bubuko.com

时间: 2024-10-06 15:33:19

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

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

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

Cmdlet开发与学习(三)

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

iOS开发RunLoop学习:四:RunLoop的应用和RunLoop的面试题

一:RunLoop的应用 #import "ViewController.h" @interface ViewController () /** 注释 */ @property (nonatomic, strong) NSThread *thread; @end @implementation ViewController /** * 1:用NSThread创建线程的时候,不要忘记调用start方法来开启线程,在一条线程中的任务执行的顺序是同步的,串行执行,并且当线程中的任务执行完毕后

Cmdlet开发与学习(七)

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

ios开发网络学习四:NSURLConnection大文件断点下载

#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> @property (weak, nonatomic) IBOutlet UIProgressView *progressView; @property (nonatomic, assign) NSInteger totalSize; @property (nonatomic, assign) NSInte

微信公众平台开发(学习)1

在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用 启用微信公众平台开发模式 基础接口消息及事件 微信公众平台PHP SDK 微信公众平台开发模式原理 开发天气预报功能 第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+M