about_PSModulePath
簡短描述
本文說明環境變數的 $env:PSModulePath
用途和使用方式。
詳細描述
$env:PSModulePath
環境變數包含資料夾位置的清單。 PowerShell 會以遞歸方式搜尋每個資料夾的模組 (.psd1
或 .psm1
) 檔案。
根據預設,指派給 $env:PSModulePath
的有效位置如下:
- CurrentUser 範圍中安裝的模組會儲存在 中
$HOME\Documents\WindowsPowerShell\Modules
。 - 安裝在 AllUsers 範圍中的模組會儲存在 中
$env:ProgramFiles\WindowsPowerShell\Modules
。 - 隨附於 儲存在 中
$PSHOME\Modules
之 Windows PowerShell 的模組,也就是$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
。
PowerShell PSModulePath 建構
每次 PowerShell 啟動時,都會建構 的值 $env:PSModulePath
。
此值會因 PowerShell 版本以及您啟動它的方式而有所不同。
Windows PowerShell 啟動
Windows PowerShell 會使用下列邏輯在啟動時建構 PSModulePath
:
- 如果
PSModulePath
不存在,請結合 CurrentUser、 AllUsers 和$PSHOME
模塊路徑 - 如果
PSModulePath
存在:- 如果
PSModulePath
包含$PSHOME
模組路徑:- AllUsers 模組路徑會在模組路徑之前
$PSHOME
插入
- AllUsers 模組路徑會在模組路徑之前
- 還:
- 只要依定義使用
PSModulePath
,因為使用者刻意移除$PSHOME
位置
- 只要依定義使用
- 如果
只有當用戶範圍$env:PSModulePath
不存在時,CurrentUser 模組路徑才會加上前置詞。 否則,會如定義使用用戶範圍 $env:PSModulePath
。
模組搜尋行為
PowerShell 會以遞歸方式搜尋 PSModulePath 中的每個資料夾,以取得模組 (.psd1
或 .psm1
) 檔案。 此搜尋模式可讓相同模組的多個版本安裝在不同的資料夾中。 例如:
Directory: C:\Program Files\WindowsPowerShell\Modules\PowerShellGet
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 8/14/2020 5:56 PM 1.0.0.1
d---- 9/13/2019 3:53 PM 2.1.2
根據預設,PowerShell 會在找到多個版本時載入模組的最高版本號碼。 若要載入特定版本,請搭配 FullyQualifiedName 參數使用。Import-Module
如需詳細資訊,請參閱 Import-Module。
修改 PSModulePath
在大部分情況下,您應該在預設模組位置安裝模組。 不過,您可能需要變更環境變數的值 PSModulePath
。
例如,若要暫時將目錄新增 C:\Program Files\Fabrikam\Modules
至 $env:PSModulePath
目前的會話,請輸入:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
若要變更每個會話中的 值 PSModulePath
,請編輯儲存 PSModulePath
值的登錄機碼。 這些PSModulePath
值會以未展開的字串的形式儲存在登錄中。 若要避免將值永久儲存 PSModulePath
為 展開 的字串,請在 GetValue()
子機碼上使用 方法,並直接編輯值。
下列範例會將 C:\Program Files\Fabrikam\Modules
路徑新增至環境變數的值 PSModulePath
,而不展開未展開的字串。
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
若要將路徑新增至使用者設定,請使用下列程式代碼:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)