在PowerShell中,有相当多的命令是通过Snap-in来注册的。PowerShell脚本的功能很强大,但有时候我们需要自己定义一些脚步来应付特殊的场合。比如我们想要做UI自动化,就会发现PowerShell并没有提供足够的命令给我们调用,而专门写一个C#程序也可以,不过扩展性不够强,那么我们可以把如何获取UI的各个元素都写成一个cmdlet,那么就有很好的扩展性了。在MSDN里有许多相关的PowerShell技术的讲解,我这里引用一个知识点,就是如何写PowerShell Snap-in, 现参考:
http://msdn.microsoft.com/en-us/library/ms714453(VS.85).aspx,写一个简单的snap-in:
I、准备工作:
1. 创建一个“Class Library”。
2. 在解决方案资源管理器, 增加两个引用System.Configuration.Install 和 System.Management.Automation。
4. 编写CS文件并编译,到.\obj\Debug 拷贝CNSytemCenterSnapIn.dll 和 CNSytemCenterSnapIn.pdb 到“C:\”。
5. 打开CMD,注册CNSytemCenterSnapIn.dll。
>cd “C:\Windows\Microsoft.NET\Framework64\v2.0.50727”
>InstallUtil.exe “CNSytemCenterSnapIn.dll”
II.、C#代码:
using
System;using
System.Collections.Generic;using
System.Linq;using
System.Text;//add some references
using
System.Management.Automation;using
System.ComponentModel;namespace
CNSytemCenterSayHelloWorld{
[
Cmdlet ( "Say" , "HelloWorld" )] // public class ExecuteShell : Cmdlet{
private string argus;[
Parameter (Position = 0)][
ValidateNotNullOrEmpty ] public string Args{
get { return argus; } set { argus = value ; }}
protected override void ProcessRecord(){
if (argus != null && argus.Length > 0){
Console .WriteLine( "Hello World:" + argus);}
}
}
[
RunInstaller ( true )] public class CNSytemCenterHelloWord : PSSnapIn{
public CNSytemCenterHelloWord():
base (){
}
// 确定加载PSsnapIn的名字,在Add-PSSnapin时会用到. public override string Name{
get { return "CNSytemCenterSayHelloWorld" ; }}
public override string Vendor{
get { return "CNSytemCenter" ; }}
public override string VendorResource{
get{
return "CNSytemCenterSayHelloWorld,CNSytemCenter" ;}
}
public override string Description{
get { return "This is a demo, design by CNSytemCenter" ; }}
}
}
III、使用:
打开PowerShell:
>Add-PSsnapIn CNSytemCenterSnapIn
>Say-HelloWord “CNBlogs”