PowerShell 模組撰寫考慮
本檔包含一些與如何撰寫模組以獲得最佳效能相關的指導方針。
模組指令清單撰寫
不使用下列指導方針的模組指令清單可能會對一般 PowerShell 效能產生明顯影響,即使模組未在會話中使用也一樣。
命令自動探索會分析每個模組,以判斷模組導出哪些命令,而且此分析的成本可能很高。 模組分析的結果會針對每個用戶進行快取,但第一次執行時無法使用快取,這是容器的典型案例。 在模組分析期間,如果導出的命令可以從指令清單完全判斷,則可以避免更昂貴的模組分析。
指導方針
在模組指令清單中,請勿在
AliasesToExport
、CmdletsToExport
和FunctionsToExport
專案中使用通配符。如果模組未匯出特定類型的命令,請藉由指定
@()
,明確地在指令清單中指定這個 。 遺漏或$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 腳本,然後剖析和編譯。