about_Modules
簡短描述
說明如何安裝、匯入和使用PowerShell模組。
完整描述
PowerShell 是腳本語言和命令殼層。 語言是由 關鍵詞所組成,可提供處理的結構和邏輯,以及執行工作的命令。 PowerShell 中的命令會實作為腳本、函式或 Cmdlet。
模組是獨立的可重複使用單位,可包含 Cmdlet、提供者、函式、變數,以及可匯入為單一單位的其他資源類型。
PowerShell 隨附一組基底模組。 您也可以視需要安裝更多模組。 根據預設,第一次從模組使用命令時,會自動載入已安裝的模組。 $PSModuleAutoloadingPreference
使用變數來啟用、停用和設定模組的自動載入。 如需詳細資訊,請參閱 about_Preference_Variables。
您可以在工作階段期間卸除或重載。 Remove-Module
使用 Cmdlet 從您的會話卸除模組。 Import-Module
使用 Cmdlet 載入模組。
模組可以建立為以 C# 撰寫的已編譯 .NET 元件,或以腳本為基礎的模組,以 PowerShell 撰寫。 本主題說明如何使用PowerShell模組。 如需如何撰寫 PowerShell 模組的詳細資訊,請參閱 撰寫 PowerShell 模組。
注意
在 PowerShell 3.0 之前,Cmdlet 和提供者已封裝在 PowerShell 嵌入式管理單元中。從 PowerShell 3.0 開始, 預設會將 Microsoft.PowerShell.Core 嵌入式管理單元新增至每個會話。 這是 PowerShell 中唯一的嵌入式管理單元。 所有其他嵌入式管理單元都已轉換成模組。 不再支援建立新的嵌入式管理單元。
安裝已發佈的模組
已發佈的模組是從已註冊的存放庫取得的模組,例如 PowerShell 資源庫。 PowerShellGet 和 Microsoft.PowerShell.PSResourceGet 模組提供 Cmdlet 來尋找、安裝 PowerShell 模組,以及將 PowerShell 模組發佈至已註冊的存放庫。
PowerShellGet 模組隨附於 PowerShell 5.0 和更新版本。 Microsoft.PowerShell.PSResourceGet 模組隨附於 PowerShell 7.4 和更新版本。 Microsoft.PowerShell.PSResourceGet 是 PowerShell 的新慣用套件管理員,可安裝在舊版 PowerShell 上。 Install-Module
使用 或 Install-PSResource
Cmdlet 從 PowerShell 資源庫 安裝模組。
Get-Command Install-Module, Install-PSResource
CommandType Name Version Source
----------- ---- ------- ------
Function Install-Module 2.9.0 PowerShellGet
Cmdlet Install-PSResource 1.0.0 Microsoft.PowerShell.PSResourceGet
如需詳細資訊,請參閱 PowerShellGet 概觀。
手動安裝模組
如果您收到模組作為其中檔案的資料夾,您必須先在計算機上安裝該模組,才能在 PowerShell 中使用。
PowerShell 隨附數個預安裝的模組。 在 Windows 電腦上,許多 Windows 功能都包含用於管理功能的模組。 這些模組會在安裝此功能時安裝。 其他模組可能會出現在安裝模組的安裝程式或安裝程式中。
根據預設, Modules
目前用戶的資料夾不存在。 如果您使用 或 Install-PSResource
在範圍Install-Module
中CurrentUser
安裝模組,這些 Cmdlet 會建立Modules
目前使用者的資料夾。 如果資料夾不存在,您可以手動建立它。
使用下列命令來建立 Modules
目前使用者的資料夾:
$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
將整個模組資料夾複製到新建立的資料夾。 在 PowerShell 中, Copy-Item
使用 Cmdlet。 例如,執行下列命令,將 MyModule
資料夾從 C:\PSTest
複製到您剛才建立的資料夾:
Copy-Item -Path C:\PSTest\MyModule -Destination $folder
您可以在任何位置安裝模組,但在預設模組位置安裝模組可讓您更輕鬆地管理模組。 如需預設模組位置的詳細資訊,請參閱 about_PSModulePath。
模組自動載入
第一次從已安裝的模組執行命令時,PowerShell 會自動匯入 (載入該模組) 。 模組必須儲存在環境變數中指定的 $env:PSModulePath
位置。 其他位置中的模組必須使用 Cmdlet 匯入 Import-Module
。
模組自動載入可讓您在模組中使用命令,而不需要任何設定或設定檔組態。 在計算機上安裝模塊之後,就不需要管理模組。
下列每個範例都會讓包含的 CimCmdlets 模組 Get-CimInstance
匯入您的工作階段。
執行命令
Get-CimInstance Win32_OperatingSystem
取得命令
Get-Command Get-CimInstance
取得命令的說明
Get-Help Get-CimInstance
您可以使用 Get-Command
Cmdlet 列出所有已安裝模組中的命令,即使它們還不在會話中也一樣。 當您搭配通配符 () *
使用Get-Command
時,PowerShell 不會匯入任何模組。 您可以使用通配符進行命令探索,而不需載入會話中可能不需要的模組。
此外,使用 PowerShell 提供者的命令不會自動匯入模組。 例如,如果您使用需要WSMan:
磁碟驅動器的命令,例如 Get-PSSessionConfiguration
Cmdlet,您可能需要執行 Import-Module
Cmdlet 以匯入包含WSMan:
磁碟驅動器的 Microsoft.WSMan.Management 模組。
手動匯入模組
當模組未安裝在環境變數所指定 $env:PSModulePath
的位置,或當模組以獨立 .dll
或 .psm1
檔案的形式提供時,而不是封裝的模組時,需要手動匯入模組。
您可能也會想要變更模組在會話中匯入的方式。 例如,的 Import-Module
Prefix 參數會將特殊前置詞新增至從模組匯入之 Cmdlet 的名詞部分。 NoClobber 參數可防止模組新增會隱藏或取代會話中現有命令的命令。 如需詳細資訊,請參閱 管理名稱衝突。
您可以藉由指定模組名稱來匯入安裝在 中的 $env:PSModulePath
模組。 例如,下列命令會將 BitsTransfer 模組匯入目前的工作階段。
Import-Module BitsTransfer
若要匯入不在 中的 $env:PSModulePath
模組,請使用模組資料夾的完整路徑。 例如,若要將目錄中的 TestCmdlets 模組 C:\ps-test
新增至您的工作階段,請輸入:
Import-Module C:\ps-test\TestCmdlets
若要匯入模組資料夾中未包含的模組檔案,請使用 命令中模組檔案的完整路徑。 例如,若要將目錄中的 TestCmdlets.dll 模組 C:\ps-test
新增至您的工作階段,請輸入:
Import-Module C:\ps-test\TestCmdlets.dll
如需將模組新增至會話的詳細資訊,請參閱 Import-Module。
在每個工作階段開始時匯入模組
Import-Module
命令會將模組匯入您目前的PowerShell工作階段。 若要將模組匯入至您啟動的每個 PowerShell 工作階段,請將 命令新增 Import-Module
至您的 PowerShell 配置檔。
如需設定檔的詳細資訊,請參閱 about_Profiles。
尋找已安裝的模組
Cmdlet Get-Module
會取得已在會話中匯入的 PowerShell 模組。
Get-Module
列出的模組可以包含從任何位置匯入的模組,而不只是從 $env:PSModulePath
。
使用下列命令來列出 中 $env:PSModulePath
安裝的模組:
Get-Module -ListAvailable
此命令會取得中 $env:PSModulePath
安裝的所有模組,而不只是匯入目前會話的模組。 此命令不會列出安裝在其他位置的模組。
如需詳細資訊,請參閱 Get-Module。
列出模組中的命令
Get-Command
使用 Cmdlet 尋找所有可用的命令。 您可以使用 Cmdlet 的參數 Get-Command
來篩選命令,例如依模組、名稱和名詞。
若要尋找模組中的所有命令,請輸入:
Get-Command -Module <module-name>
例如,若要在 BitsTransfer 模組中尋找命令,請輸入:
Get-Command -Module BitsTransfer
如需 Cmdlet 的詳細資訊 Get-Command
,請參閱 Get-Command。
拿掉模組
當您移除模組時,會從工作階段刪除模組所加入的命令。 例如,下列命令會從目前的會話中移除 BitsTransfer 模組。
Remove-Module BitsTransfer
移除模組會反轉匯入模組的作業。 拿掉模組並不會卸載模組。 如需詳細資訊,請參閱 Remove-Module。
您可以從模組和嵌入式管理單元將命令新增至您的工作階段。模組可以新增所有類型的命令,包括 Cmdlet、提供者和函式,以及變數、別名和 PowerShell 磁碟驅動器等專案。 嵌入式管理單元只能加入 Cmdlet 和提供者。
從工作階段中移除模組之前,請使用下列命令來判斷您要移除的模組。
例如,使用下列命令來尋找 和 Get-Help
Cmdlet 的來源Get-Date
:
Get-Command Get-Date, Get-Help -All |
Select-Object -Property Name, CommandType, Module ,PSSnapIn
下列輸出顯示 Get-Help
Cmdlet 位於 Microsoft.PowerShell.Core 嵌入式管理單元中。 此嵌入式管理單元無法從會話中移除。
Name CommandType Module PSSnapIn
---- ----------- ------ --------
Get-Date Function
Get-Date Cmdlet Microsoft.PowerShell.Utility
Get-Help Cmdlet Microsoft.PowerShell.Core
有兩個 來源。Get-Date
其中一個是函式,另一個則是 Microsoft.PowerShell.Utility 模組中的 Cmdlet。 您可以使用 移除模組 Remove-Module
。 若要移除函式,您可以從磁碟驅動器中刪除它 Function:
。
Remove-Item Function:Get-Date
如需磁碟驅動器的詳細資訊 Function:
,請參閱 about_Function_Provider。
管理名稱衝突
工作階段中的多個命令擁有相同名稱時,會發生名稱衝突。 當模組中的命令與工作階段中的命令或項目擁有相同的名稱時,匯入模組會造成名稱衝突。
Import-Module
可能會新增命令來隱藏和取代目前會話中的命令。 名稱衝突可能會導致隱藏或取代命令。 當匯入的模組包含與會話中現有命令同名的命令時,就會發生命令取代。 新匯入的命令會優先於現有的命令。
例如,當會話包含相同名稱的函式和 Cmdlet 時,PowerShell 預設會執行函式。 當工作階段預設包含具有相同名稱之相同類型的命令 (例如,具有相同名稱的兩個 Cmdlet) 時,它會執行最近加入的命令。
如需詳細資訊,包括優先順序規則的說明,以及執行隱藏命令的指示,請參閱 about_Command_Precedence。
您可以執行已隱藏或取代的命令,方法是限定命令名稱。 若要限定命令名稱,請新增模組的名稱,而不是包含您想要的命令版本。 例如:
Microsoft.PowerShell.Utility\Get-Date
Get-Date
使用模組名稱前置詞執行 可確保從 Microsoft.PowerShell.Utility 模組執行版本。
若要偵測名稱衝突,請使用 Cmdlet 的 Get-Command
All 參數。 根據預設, Get-Command
只會取得當您輸入命令名稱時所執行的命令。 All 參數會取得會話中具有特定名稱的所有命令。
若要防止名稱衝突,請使用 Cmdlet 的 Import-Module
NoClobber 或 Prefix 參數。 Prefix 參數會將前置詞新增至匯入命令的名稱,使其在會話中是唯一的。 NoClobber 參數不會匯入任何會隱藏或取代會話中現有命令的命令。
您也可以使用 的 Import-Module
Alias、Cmdlet、Function 和 Variable 參數,只選取您想要匯入的命令,而且您可以排除在會話中造成名稱衝突的命令。
模組作者可以使用模組指令清單的 DefaultCommandPrefix 屬性,將預設前置詞新增至所有命令名稱,以防止名稱衝突。 Prefix 參數的值優先於 DefaultCommandPrefix 的值。