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