使用VisualStudio构建自定义Snap-In

Snap-In

即在PowerShell
V1 时候引入的二进制管理单元,
必须使用 Visual Studio
等开发工具进行开发。用于扩展系统功能,自定义CmdLet
由于这种方法专业性强,普通用户无法独立完成。故在PowerShell
V2的时候引入全新的概念 “模块”,

此时 用于扩展系统功能的“模块” 不再需要专业开发人员进行开发,
普通用户可以使用PowerShell
本身的语句,命令进行自定义开发,因其友好,简单,而且易于实现。成为现阶段普通用户扩展

PowerShell功能最受欢迎的方式。
Span-In
开发先决条件
1. 至少安装.Net Framework
3.x
2. 操作系统至少为Windows
7(X86,X64均可)
3. 安装Visual
Studio或等效开发工具
4. 最低安装PowerShell2.0
5. 拥有等效本机管理员权限(用于安装Span-In)

在本例中环境如下
Visual Studio
2013 Update 1
PowerShell4.0
Windows 8.1
Update

创建解决方案
创建类库解决方案,并且为其命名
 
添加必要引用
添加 对
System.Management.Automation 的引用
其路径位置为
C:WindowsassemblyGAC_MSILSystem.Management.Automation1.0.0.0__31bf3856ad364e35System.Management.Automation.dll
添加对
System.Configuration的引用
添加对System.Configuration.Install的引用
 


 
创建PSSnapIn
用于编写PowerShell CmdLet
的全部类均在System.Management.Automation 下

PSSnapIn 为抽象类
首先继承此类,此类知名SnapIn的基本信息
如SpanIn 名称,作者,简短描述

创建CmdLet
在继承PSSnapIn
之后将创建CmdLet
 
[Cmdlet("Get", "EFSFiles")] 指明CmdLet
名称
其命名规则必须严格按照PowerShell 命令命名方式
动词-名词
然后继承PSCmdlet 类
 
此时首先声明CmdLet
参数
 
请注意
[Parameter(Mandatory = true, Position = 1,
HelpMessage = "输入搜索路径")]
这一行和使用PowerShell
命令编写命令参数完全一致
如果需要请按照命名规则以及书写方式编写。

如果有多个参数请在此时完成全部参数编写。
此后进入CmdLet
核心功能编写
 
BeginProcessing 用于初始化
收集信息,准备数据等阶段
ProcessRecord 
用于命令执行过程
EndProcessing
命令结束收尾,清理资源记录日志等等
以上三个阶段分别对应在使用PowerShell
命令编写时候的
Begin
Process
End

编译/注册Snampin
编写完成使用 Visual
Studio 自带的编译功能 进行编译 生成解决方案
 
在解决方案路径下找到生成的Dll 文件
 

此后注册Snap-In

以管理员运行PowerShell
找到你所使用的.Net
版本所在文件夹路径
 
运行
InstallUtil.exe进行注册
 
此后使用Get-PSSnapin
进行检查安装
 
加载Snap-In

 
尝试运行自定义命令
 
进行测试

删除Snap-In

导航注册表到
HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1

找到PowerShellSnapIns 若之前没有安装过任何Span-In
则不存在
 

删除对应键 即完成Span-In
解除注册

本文已于2014-07-03同步发布在www.ilync.cn

时间: 2024-10-06 16:23:43

使用VisualStudio构建自定义Snap-In的相关文章

十六、C# 常用集合类及构建自定义集合(使用迭代器)

常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollection<T> 2.主要集合类:List<T>.IDictionary<TKey,TValue>.SortedDictionary<TKey,TValue>和SortedList<T> Stack<T>.Queue<T>.Linke

详细例子构建自定义cell

在实际做项目中,使用系统自带的tableView时,cell的样式单一,不易改变.而使用xib时,能改变cell的样式,但是项目不具有可改性,xib 一旦创立,内容不会改变,这里,利用封装的思想,用纯代码建立自定义cell,数据使用plist文件存储 1.首先建立一个数据模型(moreBang),在头文件中(moreBang.h)定义模型中的属性,并将字典转为模型数据: 在moreBang.m中实现方法:(在对象方法中还可以使用KVC转化) 2.其次,在建立cell的frame模型,设置各个空间

Linux下基于官方源代码RPM包构建自定义MySQL RPM包

1.首先安装rpmbuild #yum install rpm-build gcc gcc-c++ cmake bison ncurses-devel zlib  -y 2.下载官方源码包(tar.gz格式),并解压 #wget  http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz #tar -xvf mysql-5.6.15.tar.gz 3.新建RPM文件夹 #cd  mysql-5.6.15 #mkdir rpm

Docker | 第五章:构建自定义镜像

前言 上一章节,主要是介绍了下Dockerfile的一些常用命令的说明.我们知道,利用Dockerfile可以构建一个新的镜像,比如运行Java环境,就需要一个JDK环境的镜像,但直接使用公共的镜像时,一般上大小都比较大.所以本章节就主要结合Dockerfile文件及commit方式,构建属于自己的镜像,同时对镜像进行压缩和优化,同时也是对Dockerfile知识的一个实践. 利用Dockerfile构建自定义镜像 选定基础镜像 准备JRE版本 编写Dockerfile 实践:运行SpringB

构建自定义docker镜像,上传至docker hub

docker 优势 (外部参考) Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后 发布到任何流行的Linux机器上,便可以实现虚拟化.Docker改变了虚拟化的方 式,使开发者可以直接将自己的成果放入Docker中进行管理.方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成. 安装docker(请参考外部链接) [Ubuntu Docker 安装](http://www.runoob.com/dock

Dockerfile详解,以及构建自定义镜像

Dockerfile使用 前面的操作我们一直下载下载官方已经构建好的镜像,直接下载后就可以run,如果我们想要在镜像中添加自己的应用,比如在tomcat中添加自己的app,构建一个自定义的镜像,那么我们应该怎么做,这个时候就用到了Dockerfile.Dockerfile是由一系列命令和参数构成的脚本,Docker可以根据这个脚本基于某个基础镜像创建一个新的定制化的镜像,大大提高了我们部署的效率,使用Dockfile最终的结果是帮助我们定制化自己的镜像. Dockerfile初体验 下面就基于t

使用 Yocto Project 构建自定义嵌入式 Linux 发行版

概述 Yocto Project 是一个开源协作项目,它提供了一些模板.工具和方法来支持面向嵌入式产品的自定义 Linux 系统,不管硬件架构是什么.我想要告诉那些对 yocto 这个名称不甚理解的用户的是,术语 yocto是最小的 SI 单元.最为一个前缀,yocto 表示 10^-24. 本文将提供一个分步指导,向您介绍如何使用 Yocto Project 的行业标准开源工具为嵌入式设备创建自定义的 Linux 操作系统,并使用 QEMU 在一台虚拟机中启动操作系统.Yocto Projec

使用C#构建自定义DSC Resource

准备先决条件1. Visual Studio 推荐2012 或者更高2. PowerShell 4.03. MOF文件概述1. 在使用C#构建DSC 资源时同样需要MOF(即DSC资源架构文件)为生成该文件我们可以使用TechNet上发布的xDSCResource工具进行生成2. 在使用C#构建DSC 资源时同样需要需要以下三条Cmdlet 即Get-TargetResource,Set- TargetResource,Test- TargetResource3. Get-TargetResou

Android开发——构建自定义组件

Android中,你的应用程序程序与View类组件有着一种固定的联系,例如按钮(Button). 文本框(TextView), 可编辑文本框(EditText), 列表框(ListView), 复选框(CheckBox), 单选框(RadioButton), 滚动条(Gallery), 微调器(Spinner), 等等,还有一些比较先进的有着特殊用途的View组件,例如 AutoCompleteTextView, ImageSwitcher和 TextSwitcher.除此之外,种类繁多的像 线