about_Environment_Variables
簡短描述
描述如何在PowerShell中存取和管理環境變數。
環境變數會儲存作業系統和其他程式所使用的數據。 PowerShell 會建立下列環境變數:
PSExecutionPolicyPreference
PSModulePath
PSModuleAnalysisCachePath
PSDisableModuleAnalysisCacheCleanup
如需這些變數的完整描述,請參閱 本文的 PowerShell 環境變數 。
詳細描述
PowerShell 可以在任何支援的操作系統平臺中存取和管理環境變數。 PowerShell 環境提供者可讓您取得、新增、變更、清除及刪除目前控制台中的環境變數。
環境變數與 PowerShell 中其他類型的變數不同,一律會儲存為字串。 與其他變數不同,子進程也會繼承這些變數,例如本機背景工作,以及模組成員執行所在的會話。 這讓環境變數非常適合儲存父進程和子進程所需的值。
在 Windows 上,環境變數可以在三個範圍中定義:
- 計算機 (或系統) 範圍
- 使用者範圍
- 程序範圍
[ 行程 ] 範圍包含目前進程或 PowerShell 工作階段中可用的環境變數。 此變數清單繼承自父進程,並從Machine和User範圍中的變數建構。
當您在 PowerShell 中變更環境變數時,變更只會影響目前的會話。 此行為類似於 Windows 命令殼層中命令的行為,以及 setenv
UNIX 環境中命令的行為set
。 若要變更 Machine 或 User 範圍中的值,您必須使用 System.Environment 類別的方法。
若要變更計算機範圍的變數,您也必須具有許可權。 如果您嘗試在沒有足夠許可權的情況下變更值,命令會失敗,且 PowerShell 會顯示錯誤。
PowerShell 提供數種不同的方法來使用和管理環境變數。
- 變數語法
- 環境提供者和專案 Cmdlet
- .NET System.Environment 類別
使用變數語法
您可以使用下列語法來顯示和變更環境變數的值:
$Env:<variable-name>
例如,若要顯示環境變數的值 WINDIR
:
$Env:windir
C:\Windows
在此語法中,貨幣符號 ($
) 表示變數,而磁碟驅動器名稱 (Env:
) 則表示環境變數後面接著變數名稱 (windir
)。
您可以使用下列語法來建立及更新環境變數的值:
$Env:<variable-name> = "<new-value>"
例如,若要建立 Foo
環境變數:
$Env:Foo = 'An example'
因為環境變數一律是字串,因此您可以使用它們,就像包含字元串的任何其他變數一樣。 例如:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
在 PowerShell 中,環境變數無法設定為空字串。 將環境變數設定為 $null
,或將空字串從目前的會話中移除。 例如:
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
傳回錯誤,因為已移除環境變數。
您可以在空字串上使用錯誤時,看到它不會傳回錯誤:
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
如需 PowerShell 中變數的詳細資訊,請參閱 about_Variables。
使用環境提供者和專案 Cmdlet
PowerShell 的環境 提供者提供介面,讓您以類似文件系統磁碟驅動器的格式與環境變數互動。 它可讓您在 PowerShell 中取得、新增、變更、清除和刪除環境變數和值。
例如,若要建立 Foo
值為的 Bar
環境變數:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
您也可以使用 Copy-Item
複製環境變數、使用 Set-Item
設定環境變數的值、使用 Get-Item
列出環境變數,並使用 刪除環境變數 Remove-Item
。
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
Get-ChildItem
使用 Cmdlet 來檢視環境變數的完整清單:
Get-ChildItem Env:
如需使用 環境 提供者管理環境變數的詳細資訊,請參閱 about_Environment_Provider。
使用 System.Environment 方法
System.Environment 類別提供 GetEnvironmentVariable()
和 SetEnvironmentVariable()
方法來取得和修改環境變數。
下列範例會建立新的環境變數 , Foo
其值為 Bar
,然後傳回其值。
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
您可以使用 方法移除環境變數 SetEnvironmentVariable()
,方法是指定變數值的空字串。 例如,若要移除 Foo
環境變數:
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
如需 System.Environment 類別之方法的詳細資訊,請參閱環境方法。
在 Windows 中建立持續性環境變數
在 Windows 上,有三種方法可以持續變更環境變數:
- 在您的配置檔中設定它們
SetEnvironmentVariable()
使用方法- 使用系統 控制台
在配置檔中設定環境變數
您可以在載入設定檔的任何工作階段中使用您在 PowerShell 設定檔中新增或變更的任何環境變數。 此方法適用於任何支持平臺上的任何 PowerShell 版本。
例如,若要建立 CompanyUri
環境變數並更新 Path
環境變數以包含 C:\Tools
資料夾,請將下列幾行新增至 PowerShell 配置檔:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
您可以使用自動變數取得 PowerShell 設定檔 $PROFILE
的路徑。 如需配置檔的詳細資訊,請參閱 about_Profiles。
使用 SetEnvironmentVariable 設定環境變數()
在 Windows 上,您可以將 方法的範圍 SetEnvironmentVariable()
指定為第三個參數,以在該範圍中設定環境變數。 計算機和用戶範圍都會保存在目前進程之外,讓您儲存新的或變更的環境變數。
例如,若要將具有 值Bar
的新環境變數Foo
儲存至計算機範圍:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
您可以將變數的值設定為空字串,以從使用者或計算機範圍刪除環境變數。
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
在系統 控制台 中設定環境變數
在 [系統] 控制台 中,您可以在 [使用者] 和 [計算機] 範圍中新增或編輯現有的環境變數。 Windows 會將這些值寫入登錄,以便在工作階段和系統重新啟動之間保存。
若要使用系統 控制台 對 Windows 上的環境變數進行持續性變更:
- 開啟 [系統 控制台。
- 選取系統。
- 選取 [ 進階系統設定]。
- 移至 [ 進階 ] 索引標籤。
- 選取 [ 環境變數...]。
- 執行您的變更。
PowerShell 環境變數
PowerShell 功能可以使用環境變數來儲存使用者喜好設定。 這些變數的運作方式類似喜好設定變數,但它們是由其建立所在的會話子會話所繼承。 如需喜好設定變數的詳細資訊,請參閱 about_Preference_Variables。
儲存喜好設定的環境變數包括:
PSExecutionPolicyPreference
儲存目前會話的執行原則集。 只有在您為單一會話設定執行原則時,才會存在此環境變數。 您可以透過兩種不同的方式來執行此動作。
使用 ExecutionPolicy 參數從命令行啟動工作階段,以設定工作階段的執行原則。
使用
Set-ExecutionPolicy
指令程式。 使用 Scope 參數搭配 的值Process
。手動設定環境變數。 變更此變數的值會變更目前進程的執行原則。
此資訊僅適用於 Windows 平臺。 如需詳細資訊,請參閱 about_Execution_Policies。
PSModulePath
$env:PSModulePath
環境變數包含搜尋以尋找模組和資源的資料夾位置清單。根據預設,指派給
$env:PSModulePath
的有效位置如下:全系統位置:這些資料夾包含隨附於PowerShell的模組。 模組會儲存在
$PSHOME\Modules
位置中。 此外,這是安裝 Windows 管理模組的位置。使用者安裝的模組:這些模組是由使用者所安裝。
Install-Module
具有 Scope 參數,可讓您指定模組是針對目前使用者還是所有使用者安裝。 如需詳細資訊,請參閱 Install-Module。- 在 Windows 上,使用者特定 CurrentUser 範圍的位置是
$HOME\Documents\PowerShell\Modules
資料夾。 AllUsers 範圍的位置為$env:ProgramFiles\PowerShell\Modules
。
- 在 Windows 上,使用者特定 CurrentUser 範圍的位置是
此外,將模組安裝在其他目錄中的安裝程式,例如 Program Files 目錄,可以將其位置附加至 的值
$env:PSModulePath
。如需詳細資訊,請參閱 about_PSModulePath。
PSModuleAnalysisCachePath
PowerShell 可控制用來快取模組及其 Cmdlet 相關數據的檔案。 快取會在啟動時讀取,同時搜尋命令,並在匯入模組後於背景線程上寫入。
快取的預設位置為:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
快取的預設檔案名稱為
ModuleAnalysisCache
。注意
如果命令探索無法正常運作,例如 IntelliSense 會顯示不存在的命令,您可以刪除快取檔案。 下次啟動 PowerShell 時,會重新建立快取。
若要變更快取的預設位置,請在啟動 PowerShell 之前設定環境變數。 此值應該會命名PowerShell有權建立和寫入檔案的完整路徑(包括檔名)。
此環境變數的變更只會影響子進程。 如需有關建立永續性環境變數的資訊,請參閱前幾節。
若要停用檔案快取,請將此值設定為無效的位置,例如:
# `NUL` here is a special device on Windows that can't be written to $env:PSModuleAnalysisCachePath = 'NUL'
這會設定 NUL 裝置的路徑。 PowerShell 無法寫入路徑,但不會傳回錯誤。 您可以使用追蹤來檢視回報的錯誤:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
PSDisableModuleAnalysisCacheCleanup
寫出模組分析快取時,PowerShell 會檢查已不存在的模組,以避免不必要的大型快取。 有時候不需要這些檢查,在此情況下,您可以將此環境變數值設定為
1
來關閉。設定此環境變數會針對目前進程中的後續清除事件生效。 若要確保啟動時已停用清除,您必須在啟動 PowerShell 之前設定環境變數。 如需有關建立永續性環境變數的資訊,請參閱前幾節。
PowerShell 所使用的其他環境變數
路徑資訊
PATH
$env:PATH
環境變數包含作業系統搜尋可執行檔的資料夾位置清單。 在 Windows 上,資料夾位置清單會以分號 (;
) 字元分隔。PATHEXT
變數
$env:PATHEXT
包含 Windows 視為可執行檔的擴展名清單。 從 PowerShell 執行具有其中一個已列出延伸模組的腳本檔案時,腳本會在目前的控制台或終端機會話中執行。 如果未列出擴展名,腳本會在新的控制台會話中執行。若要確保其他文稿語言的腳本會在目前的控制台會話中執行,請新增腳本語言所使用的擴展名。 例如,若要在目前的控制台中執行 Python 腳本,請將擴充功能新增
.py
至環境變數。 若要讓 Windows 支援.py
延伸名作為可執行檔,您必須使用ftype
CMD 命令殼層的 和assoc
命令來註冊擴展名。 PowerShell 沒有直接方法來註冊檔案處理程式。 如需詳細資訊,請參閱 ftype 命令的檔。PowerShell 腳本一律會在目前的控制台會話中啟動。 您不需要新增
.PS1
擴充功能。