共用方式為


如何撰寫PowerShell二進位模組

二進位模組可以是包含 Cmdlet 類別的任何元件 (.dll)。 根據預設,匯入二進位模組時,會匯入元件中的所有 Cmdlet。 不過,您可以藉由建立根模組是元件的模組指令清單來限制匯入的 Cmdlet。 (例如,指令清單的 CmdletsToExport 索引鍵只能用來匯出所需的 Cmdlet。此外,二進位模組可以包含其他檔案、目錄結構,以及單一 Cmdlet 無法提供的其他實用管理資訊片段。

下列程序說明如何建立及安裝PowerShell二進位模組。

如何建立及安裝PowerShell二進位模組

  1. 建立二進位 PowerShell 解決方案(例如以 C# 撰寫的 Cmdlet),其中包含您需要的功能,並確保其能正常執行。

    從程式代碼的觀點來看,二進位模組的核心是 Cmdlet 元件。 事實上,PowerShell 會將單一 Cmdlet 元件視為載入和卸除的模組,而開發人員不需要額外的工作。 如需撰寫 Cmdlet 的詳細資訊,請參閱 撰寫 Windows PowerShell Cmdlet

  2. 如有必要,請建立解決方案的其餘部分:(其他 Cmdlet、XML 檔案等等),並使用模組指令清單加以描述。

    除了描述解決方案中的 Cmdlet 元件之外,模組指令清單還可以描述您要如何匯出和匯入模組、將公開哪些 Cmdlet,以及哪些其他檔案會進入模組。 不過,如先前所述,PowerShell 可以像模組一樣處理二進位 Cmdlet,而不需要額外的工作。 因此,模組指令清單主要用於將多個檔案合併成單一套件,或明確控制指定元件的發行集。 如需詳細資訊,請參閱 如何撰寫 PowerShell 模組指令清單

    下列程式代碼是簡化的 C# 範例,其中包含相同檔案中的三個 Cmdlet,可作為模組使用。

    using System.Management.Automation;           // Windows PowerShell namespace.
    
    namespace ModuleCmdlets
    {
      [Cmdlet(VerbsDiagnostic.Test,"BinaryModuleCmdlet1")]
      public class TestBinaryModuleCmdlet1Command : Cmdlet
      {
        protected override void BeginProcessing()
        {
          WriteObject("BinaryModuleCmdlet1 exported by the ModuleCmdlets module.");
        }
      }
    
      [Cmdlet(VerbsDiagnostic.Test, "BinaryModuleCmdlet2")]
      public class TestBinaryModuleCmdlet2Command : Cmdlet
      {
          protected override void BeginProcessing()
          {
              WriteObject("BinaryModuleCmdlet2 exported by the ModuleCmdlets module.");
          }
      }
    
      [Cmdlet(VerbsDiagnostic.Test, "BinaryModuleCmdlet3")]
      public class TestBinaryModuleCmdlet3Command : Cmdlet
      {
          protected override void BeginProcessing()
          {
              WriteObject("BinaryModuleCmdlet3 exported by the ModuleCmdlets module.");
          }
      }
    
    }
    
  3. 封裝您的解決方案,並將套件儲存至 PowerShell 模組路徑中的某個位置。

    全域 $env:PSModulePath 環境變數描述 PowerShell 用來尋找模組的預設路徑。 例如,在系統上儲存模組的常見路徑會 %SystemRoot%\Users\<user>\Documents\WindowsPowerShell\Modules\<moduleName>。 如果您未使用預設路徑,則必須在安裝期間明確陳述模組的位置。 請務必建立資料夾來儲存模組,因為您可能需要資料夾來儲存解決方案的多個元件和檔案。

    就技術上而言,您不需要在 上的任何位置 $env:PSModulePath 安裝模組, 這些只是 PowerShell 會尋找模組的預設位置。 不過,最佳做法是這樣做,除非您有充分的理由將模組儲存在其他地方。 如需詳細資訊,請參閱 安裝 PowerShell 模組about_PSModulePath

  4. 將模組匯入 PowerShell,並呼叫 Import-Module

    呼叫 以 Import-Module 將您的模組載入使用中記憶體。 如果您使用PowerShell 3.0和更新版本,在程式代碼中從模組叫用命令也會匯入它。 如需詳細資訊,請參閱 匯入 PowerShell 模組

模組初始化和清除程序代碼

如果您的模組需要在匯入或移除時執行某些動作,例如探索工作或初始化,您可以實 IModuleAssemblyInitializer 作 和 IModuleAssemblyCleanup 介面。

備註

除非絕對必要,否則不建議使用此模式。 若要保持 PowerShell 效能,您應該在呼叫命令而不是匯入時延遲載入專案。

將嵌入式管理單元元件匯入為模組

嵌入式管理單元元件中存在的 Cmdlet 和提供者可以載入為二進位模組。 當嵌入式管理單元元件載入為二進位模組時,嵌入式管理單元中的 Cmdlet 和提供者可供使用者使用,但會忽略元件中的嵌入式管理單元類別,而且不會註冊嵌入式管理單元。 因此,即使 Cmdlet 和提供者可供會話使用,Windows PowerShell 所提供的嵌入式管理單元 Cmdlet 仍無法偵測嵌入式管理單元。

此外,嵌入式管理單元所參考的任何格式或類型檔案都無法匯入為二進位模組的一部分。 若要匯入格式設定和類型檔案,您必須建立模組指令清單。 請參閱 如何撰寫 PowerShell 模組指令清單

另請參閱