1. 程式人生 > 其它 >使用Visual Studio 2010 一步一步建立Powershell Module 和 Cmdlet

使用Visual Studio 2010 一步一步建立Powershell Module 和 Cmdlet

之前寫了一個C# 呼叫PowerShell方法, 那麼怎麼反過來操作呢,也就是怎麼樣用C#寫一個powershell命令呢?

現在就用C#寫一個超級簡單的Module和Cmdlet

1. 在VS中建立一個Library的專案

檔案->新建->專案->C#->Class Library

在這裡給我們的Class Library起一個名字”FirstPS”

2. 新增必要的引用“System.Management”和“System.Management.Automation”

2.1   新增System.Management

在新建的專案下面找到引用->新增引用

在.net選項卡下找到System.Management

2.2   新增System.Management.Automation

可以在C:windowsassemblyGAC_MSILSystem.Management.Automation1.0.0.0__31bf3856ad364e35下面找到

在新增引用的視窗選擇“瀏覽”選項卡,找到需要的引用

3. 現在進入今天的一個重要環節,編寫業務邏輯

 1 namespace FirstPS
 2 {
 3     [Cmdlet(VerbsCommon.Get, "Greeting")]   //建立get命令,get-Greeting
 4     public class DemoPS : PSCmdlet
 5     {
 6         [Parameter(Mandatory = true)]       //命令列後需要一個引數: get-Greeting -Name 輸入一個字串
 7         public string Name { get;set;}
 8 
 9         protected override void ProcessRecord()
10         {
11             WriteObject(string.Format("Hello {0}, 現在是: {1}", Name, Greeting()));
12         }
13 
14         /// <summary>
15         /// 根據系統時間,判斷十二個時辰
16         /// </summary>
17         /// <returns>當前時間是那個時辰</returns>
18         private string Greeting()
19         {
20             int hour = DateTime.Now.Hour;
21             if (hour >= 23)
22             {
23                 return "子時n【子時】夜半,又名子夜、中夜:十二時辰的第一個時辰。(北京時間23時至01時)。";
24             }
25             if (hour >= 21)
26             {
27                 return "亥時n【亥時】人定,又名定昏等:此時夜色已深,人們也已經停止活動,安歇睡眠了。人定也就是人靜。(北京時間21時至23時)。";
28             }
29             if (hour >= 19)
30             {
31                 return "戌時n【戌時】黃昏,又名日夕、日暮、日晚等:此時太陽已經落山,天將黑未黑。天地昏黃,萬物朦朧,故稱黃昏。(北京時間19時至21時)。";
32             }
33             if (hour >= 17)
34             {
35                 return "酉時n【酉時】日入,又名日落、日沉、傍晚:意為太陽落山的時候。(北京時間17是至19時)。";
36             }
37             if (hour >= 15)
38             {
39                 return "申時n【申時】哺時,又名日鋪、夕食等:(北京時間15食至17時)。";
40             }
41             if (hour >= 13)
42             {
43                 return "未時n【未時】日昳,又名日跌、日央等:太陽偏西為日跌。(北京時間13時至15時)。";
44             }
45             if (hour >= 11)
46             {
47                 return "午時n【午時】日中,又名日正、中午等:(北京時間11時至13時)。";
48             }
49             if (hour >= 9)
50             {
51                 return "巳時n【巳時】隅中,又名日禺等:臨近中午的時候稱為隅中。(北京時間09 時至11時)。";
52             }
53             if (hour >= 7)
54             {
55                 return "辰時n【辰時】食時,又名早食等:古人“朝食”之時也就是吃早飯時間,(北京時間07時至09時)。";
56             }
57             if (hour >= 5)
58             {
59                 return "卯時n【卯時】日出,又名日始、破曉、旭日等:指太陽剛剛露臉,冉冉初升的那段時間。(北京時間05時至07時)。";
60             }
61             if (hour >= 3)
62             {
63                 return "寅時n【寅時】平旦,又稱黎明、早晨、日旦等:時是夜與日的交替之際。(北京時間03時至05時)。";
64             }
65             if (hour >= 1)
66             {
67                 return "丑時n【丑時】雞鳴,又名荒雞:十二時辰的第二個時辰。(北京時間01時至03時)。";
68             }
69             if (hour >= 0)
70             {
71                 return "子時n【子時】夜半,又名子夜、中夜:十二時辰的第一個時辰。(北京時間23時至01時)。";
72             }
73             return "二十四個時辰已經不適合這臺電腦了, 快回自己的自己的星球!!";

程式碼大功告成,現在需要把這個Library進行編譯,編譯好後就可以為powershell用了。

4. 現在進入今天另外一個重要的環節,匯入DLL到powershell並執行Cmdlet

4.1 使用Import-Module dll的全路徑,匯入dll

4.2 現在就是見證奇蹟的時刻,輸入我們的命令get-Greeking -Name test

在英文系統下直接執行上面的cmdlet,中文顯示亂碼,使用ISE就沒有亂碼的問題,在此謝謝@walkerwang幫助解決亂碼問題

這個是我第一次如此認真的寫完一篇部落格,希望這個對大家有幫助,如果有幫助就推薦一下吧,謝謝支援!