模組是一組相關的 Windows PowerShell 功能,將它們作為一個方便的單元(通常儲存在單一目錄中)。 透過將一組相關的腳本檔案、組件和相關資源定義為模組,你可以比平常更容易引用、載入、持久化和分享你的程式碼。
模組的主要目的是允許重用與抽象 Windows PowerShell 程式碼。 舉例來說,建立模組最基本的方式就是將 Windows PowerShell 腳本存成.psm1檔案。 這樣做可以讓你控制哪些函式和變數會暴露給使用者,腳本中的變數是公開的還是私有的。 將腳本儲存為 .psm1 檔案也能讓你控制某些變數的範圍。 最後,你也可以使用像 Install-Module 這類 cmdlet 來組織、安裝,並用腳本作為較大解決方案的建構模組。
模組組件與類型
模組由四個基本組成部分組成:
某種程式碼檔——通常是 PowerShell 腳本或受管理的 cmdlet 組合語言。
上述程式碼檔案可能需要的其他東西,例如額外的組合語言、說明檔或腳本。
一個清單檔案,描述上述檔案,並儲存作者與版本控制資訊等元資料。
一個包含上述所有內容的目錄,且位於 PowerShell 合理能找到的地方。
Note
這些元件本身其實都不是必需的。 例如,模組技術上可以只是儲存在
.psm1檔案中的腳本。 你也可以有一個模組,裡面只有一個清單檔案,主要用於組織管理。 你也可以寫一個腳本,動態建立模組,因此其實不需要目錄來存放任何東西。 以下章節將說明你透過混合搭配模組中不同可能部分所能得到的模組類型。
腳本模組
顧名思義,腳本模組是一個包含任何有效 Windows PowerShell 程式碼的檔案.psm1()。 腳本開發者與管理員可以使用此類模組建立包含函式、變數等成員的模組。 本質上,腳本模組就是帶有不同擴充功能的 Windows PowerShell 腳本,允許管理員在其上使用匯入、匯出及管理功能。
此外,你也可以使用清單檔案來包含模組中的其他資源,例如資料檔案、其他相依模組或執行時腳本。 清單檔案也有助於追蹤中繼資料,如撰寫與版本資訊。
最後,腳本模組,像其他非動態建立的模組一樣,必須儲存在 PowerShell 合理能發現的資料夾中。 通常,這會發生在 PowerShell 模組路徑上;但如果需要,你可以明確描述模組安裝的位置。 欲了解更多資訊,請參閱 《如何撰寫 PowerShell 腳本模組》。
二元模組
二進位模組是一種包含已編譯程式碼(如 C#)的 .NET Framework 組合語言.dll。
Cmdlet 開發者可以使用這類模組來分享 cmdlet、提供者等。 現有的 snap-in 也可以作為二進位模組使用。 與腳本模組相比,二進位模組允許你建立更快的指令碼小子,或使用在 Windows PowerShell 腳本中不那麼容易寫的功能(例如多執行緒)。
與腳本模組相同,你可以包含一個清單檔案,描述模組所使用的額外資源,並追蹤模組的元資料。 同樣地,你應該把二進位模組安裝在 PowerShell 模組路徑上的某個資料夾裡。 欲了解更多資訊,請參閱《如何 撰寫 PowerShell 二進位模組》。
清單模組
清單模組是一種使用清單檔案來描述所有元件的模組,但沒有任何核心組件或腳本。 形式上,顯現模組會讓 ModuleToProcess 顯現中的 or RootModule 元素為空。 不過,你仍然可以使用模組的其他功能,例如載入相依組件或自動執行某些預處理腳本。 你也可以用清單模組方便地打包其他模組會用到的資源,例如巢狀模組、組件、型別或格式。 欲了解更多資訊,請參閱 《如何撰寫 PowerShell 模組清單》。
動態模組
動態模組是指不會從檔案載入或儲存到檔案的模組。 相反地,它們是由腳本動態建立,使用 新模組 cmdlet。 這類模組讓腳本能按需建立一個不需要載入或儲存到持久儲存的模組。
動態模組本質上是設計成壽命短的,因此指令檔無法存取 Get-Module 。 同樣地,他們通常不需要模組清單,也不太可能需要永久資料夾來存放相關組件。
模組清單
模組清單是一個.psd1包含雜湊表的檔案。 雜湊表中的鍵和值有以下功能:
- 描述模組的內容與屬性。
- 定義先修條件。
- 確定這些元件的處理方式。
模組不需要指令清單。 模組可以參考腳本檔案(.ps1)、腳本模組檔案(.psm1)、manifest 檔案(.psd1)、格式化與類型檔案(.ps1xml)、cmdlet 與提供者組合()、.dll資源檔案、說明檔案、本地化檔案,或任何隨模組捆綁的檔案或資源。 對於國際化腳本,模組資料夾還包含一組訊息目錄檔案。 如果你把 manifest 檔案加入模組資料夾,可以透過參考清單來將多個檔案當作單一單位參考。
清單本身描述了以下資訊類別:
- 關於模組的元資料,例如模組版本號、作者及描述。
- 匯入模組所需的前置條件,例如 Windows PowerShell 版本、通用語言執行時(CLR)版本,以及所需的模組。
- 處理指令,例如腳本、格式與處理類型。
- 對模組成員的匯出限制,例如別名、函式、變數及指令檔。
欲了解更多資訊,請參閱 《如何撰寫 PowerShell 模組清單》。
儲存與安裝模組
一旦你建立了腳本、二進位或清單模組,就可以將作品儲存在其他人能存取的位置。 例如,你的模組可以儲存在安裝 Windows PowerShell 的系統資料夾中,或是儲存在使用者資料夾中。
一般來說,你可以透過變數中儲存 $Env:PSModulePath 的路徑之一來決定模組應該安裝在哪裡。 使用這些路徑之一,當使用者呼叫你的模組時,PowerShell 就能自動找到並載入你的模組。 如果你把模組存放在別處,你可以在呼叫 Install-Module時,透過將模組的位置作為參數,明確告訴 PowerShell 。
無論如何,資料夾的路徑稱為模組 的基底 (ModuleBase),腳本、二進位或清單模組檔案的名稱應與模組資料夾名稱相同,但有以下例外:
- 由
New-Modulecmdlet 建立的動態模組可用 cmdlet 的參數命名Name。 - 由指令從組合物件
Import-Module -Assembly匯入的模組,依以下語法命名:"dynamic_code_module_" + assembly.GetName()。
欲了解更多資訊,請參閱 安裝 PowerShell 模組 及 about_PSModulePath。
模組指令集與變數
以下 cmdlet 與變數由 Windows PowerShell 提供,用於模組的建立與管理。
- 新模組會 建立一個只存在於記憶體中的動態模組。 該模組由腳本區塊建立,其匯出的成員,如函式與變數,會立即在會話中可用,並持續使用直到會話關閉。
-
New-ModuleManifest 會建立一個新的 module manifest (
.psd1) 檔案,填入其值,並將 manifest 檔案儲存到指定的路徑。 此 cmdlet 也可用來建立模組清單範本,並可手動填寫。 - Import-Module 會將一個或多個模組加入目前的 session。
- Get-Module 會取得已匯入或可匯入目前會話的模組資訊。
-
Export-ModuleMember 指定從腳本模組
.psm1()檔案或使用New-Module該指令碼建立的動態模組匯出的模組成員(如指令母帶、函式、變數與別名)。 - Remove-Module 會從當前會話中移除模組。
-
Test-ModuleManifest 透過驗證模組清單中列出
.psd1的檔案是否真實存在於指定路徑中,來驗證模組清單是否準確描述模組的元件。 -
$PSScriptRoot包含執行腳本模組的目錄。 它讓腳本能利用模組路徑存取其他資源。 -
$Env:PSModulePath包含儲存 Windows PowerShell 模組的目錄清單。 Windows PowerShell 在自動匯入模組及更新說明主題時,會使用此變數值。