共用方式為


PowerShell 模組撰寫考慮

本檔包含一些與如何撰寫模組以獲得最佳效能相關的指導方針。

模組指令清單撰寫

不使用下列指導方針的模組指令清單可能會對一般 PowerShell 效能產生明顯影響,即使模組未在會話中使用也一樣。

命令自動探索會分析每個模組,以判斷模組導出哪些命令,而且此分析的成本可能很高。 模組分析的結果會針對每個用戶進行快取,但第一次執行時無法使用快取,這是容器的典型案例。 在模組分析期間,如果導出的命令可以從指令清單完全判斷,則可以避免更昂貴的模組分析。

指導方針

  • 在模組指令清單中,請勿在 AliasesToExportCmdletsToExportFunctionsToExport 專案中使用通配符。

  • 如果模組未匯出特定類型的命令,請藉由指定 @(),明確地在指令清單中指定這個 。 遺漏或 $null 項目相當於指定通配符 *

應盡可能避免下列事項:

@{
    FunctionsToExport = '*'

    # Also avoid omitting an entry, it's equivalent to using a wildcard
    # CmdletsToExport = '*'
    # AliasesToExport = '*'
}

請改用:

@{
    FunctionsToExport = 'Format-Hex', 'Format-Octal'
    CmdletsToExport = @()  # Specify an empty array, not $null
    AliasesToExport = @()  # Also ensure all three entries are present
}

避免CDXML

決定如何實作模組時,有三個主要選擇:

  • 二進位 (通常是 C#)
  • 腳本 (PowerShell)
  • CDXML (包裝 CIM 的 XML 檔案)

如果載入模組的速度很重要,CDXML 大致上比二進位模組慢一個大小。

二進位模組會載入最快速度,因為它會事先編譯,而且可以使用 NGen 對每部機器進行 JIT 編譯一次。

腳本模組通常載入的速度比二進位模組慢一點,因為PowerShell必須先剖析腳本,才能編譯和執行腳本。

CDXML 模組通常比腳本模組慢很多,因為它必須先剖析 XML 檔案,然後產生相當多的 PowerShell 腳本,然後剖析和編譯。