zoukankan      html  css  js  c++  java
  • 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。

          

      

  • 相关阅读:
    centos磁盘满了,查找大文件并清理
    centos如何查看磁盘剩余空间
    无法连接mysql,请检查mysql是否已启动及用户密码是否设置正确
    HTTP/1.1新建会话失败 解决方法及分析
    PHP 获取 IE浏览器版本号
    基于Android Studio搭建Android应用开发环境
    打印机重启后才能打印
    洛谷P1141 01迷宫【DFS】
    洛谷P1219 八皇后【DFS】
    UVA133
  • 原文地址:https://www.cnblogs.com/ByronsHome/p/3721635.html
Copyright © 2011-2022 走看看