PowerShell入門(十二):編寫PowerShell管理單元和二進制模塊


  PowerShell一開始就提出利用管理單元來實現自定義cmdlet,為大型軟件系統提供有別於UI界面的腳本化管理方案。在PowerShell V2中,PowerShell管理單元還能以二進制模塊的方式處理。

編寫管理單元

  編寫PowerShell管理單元需要依賴System.Management.Automation程序集;而System.Management.Automation程序集是Windows SDK的一部分,所以安裝Windows SDK是編寫PowerShell管理單元的先決條件。可以從這里下載Windows SDK。

  作為編寫PowerShell管理單元的准備,我們先打開VS2008或者VS2010,創建一個類庫項目,目標.Net Framework版本選擇3.5。簡單編譯通過之后,就可以編寫cmdlet命令類和SnapIn安裝類了。

編寫cmdlet類

  自定義cmdlet類有以下幾個步驟:

  1、在項目中添加對System.Management.Automation程序集的引用(路徑是C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll);並且添加相應命令空間的引用using System.Management.Automation;

  2、創建名為New-Addition的類,添加對命令空間System.Management.Automation的引用;

  3、讓New-Addition類繼承自PSCmdlet,並給New-Addition類添加Cmdlet屬性標記,設置動詞和名詞;

  4、添加參數信息,參數一定要用Parameter屬性標記;

  5、重載ProcessRecord函數,實現自己的業務邏輯;

編寫cmdlet類的示例如下(本文示例參考了Ivor Bright's blog):

using System;
using System.Management.Automation;

namespace PSSnapInDemo1
{
    [Cmdlet(VerbsCommon.New, "Addition")]
    public class New_Addition: PSCmdlet
    {
        [Alias("X")]
        [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true)]
        public int FirstParameter { get; set; }

        [Alias("Y")]
        [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true)]
        public int SecondParameter { get; set; }

        protected override void ProcessRecord()
        {
            WriteObject(string.Format("{0} + {1} = {2}", this.FirstParameter, this.SecondParameter, 
                this.FirstParameter + this.SecondParameter));
        }
    }
}

編譯通過后,自定義的cmdlet類就完成了,接下來就可以編寫PSSnapIn安裝類了。

編寫PSSnapIn安裝類

  編寫PSSnapIn安裝類的目的是使該類庫能夠被安裝,並且被系統識別為PowerShell管理單元。步驟如下:

  1、添加對System.Configuration.Install程序集的引用;

  2、創建名為PSSnapInInstaller的類,添加對命名空間System.ComponentModel和System.Management.Automation的引用;

  3、讓PSSnapInInstaller類繼承自PSSnapIn,並且以RunInstaller(true)屬性標識它。

  4、重載Name、Vendor和Description三個屬性;

示例如下:

using System;
using System.Management.Automation;
using System.ComponentModel;

namespace PSSnapInDemo1
{
    [RunInstaller(true)]
    public class PSSnapInInstaller : PSSnapIn
    {
        public override string Description
        {
            get { return "This is Luke's first Snap In demo"; }
        }

        public override string Name
        {
            get { return "PSSnapInDemo1"; }
        }

        public override string Vendor
        {
            get { return "CaiJu"; }
        }
    }
}

編譯通過以后,PSSnapIn安裝類也完成了,這樣我們編寫代碼的工作就全部完成了。編譯整個解決方案,生成類庫文件。

使用管理單元

  編寫好的管理單元,在使用之前需要先注冊。注冊流程如下:

  1、打開Visual Studio自帶的命名行,並且導航到PSSnapInDemo1.dll的目錄中;

  2、執行“installUtil /i PSSnapInDemo1.dll”命令;

如上命令如果成功執行,注冊過程就完成了;如果不成功,請仔細檢查安裝過程的log文件。

  PowerShell管理單元注冊成功后,就可以將其添加到當前會話中使用了。查找已經注冊的PowerShell管理單元,可用以下命令:

PS C:\Users\luke> Get-PSSnapin -Registered | ft

Name                           PSVersion            Description
----                           ---------            -----------
PSSnapInDemo1                  2.0                  This is Luke's first Snap I...
SqlServerCmdletSnapin100       2.0                  This is a PowerShell snap-i...
SqlServerProviderSnapin100     2.0                  SQL Server Provider


以上命令的輸出結果已經顯示出了我們剛剛注冊的PowerShell管理單元,添加管理單元使用如下命令:

PS C:\Users\luke> Add-PSSnapin -Name PSSnapInDemo1


PowerShell管理單元添加成功后,就可以使用其中的命令了,使用方法與使用系統自帶的cmdlet命令相同。

編寫二進制模塊

  編寫二進制模塊的編寫與編寫管理單元的方法基本相同,都需要實現cmdlet類,但它不需要實現安裝類。具體方法參見上述編寫cmdlet類的步驟。需要說明的是,同時實現了PSSnapIn類的類庫,仍然可以當作二進制模塊來使用。也就是說,PowerShell管理單元的程序集文件,可以不加修改的當成二進制模塊的程序集來使用。

使用二進制模塊

  二進制模塊的使用與PowerShell入門(十一):編寫腳本模塊中腳本模塊的使用方法相同,即在搜索目錄下創建同名文件夾,並將程序集拷貝進去,可選創建描述文件等;然后查找和導入模塊。之后,二進制模塊中的命令就可以使用了。

結語

  除了自定義cmdlet外,PowerShell管理單元還可以編寫自定義提供程序。提供程序是一個更高級別的概念,系統預定義的有文件系統、注冊表和證書等。不過,PowerShell管理單元中不能定義別名和變量,如果你需要這些功能,可以選擇使用腳本模塊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM