如何写PowerShell Snap-in

在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.InstallSystem.Management.Automation。

4.       编写CS文件并编译,到.\obj\Debug 拷贝CNSytemCenterSnapIn.dllCNSytemCenterSnapIn.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”

 

 

posted on 2009-12-31 16:22  System Center  阅读(785)  评论(0编辑  收藏  举报

导航