共用方式為


關於環境變數

簡短描述

描述如何在 Windows PowerShell 中存取 Windows 環境變數。

詳細描述

環境變數會儲存作業系統環境的相關信息。 此資訊包括作業系統路徑、操作系統所使用的處理器數目,以及暫存資料夾的位置等詳細數據。

環境變數會儲存作業系統和其他程式所使用的數據。 例如,WINDIR 環境變數包含 Windows 安裝目錄的位置。 程式可以查詢此變數的值,以判斷 Windows 作業系統檔案所在的位置。

PowerShell 可讓您檢視和變更 Windows 環境變數,包括登錄中設定的變數,以及針對特定會話設定的變數。 PowerShell 環境提供者可讓您輕鬆地檢視和變更環境變數,藉此簡化此程式。

不同於 PowerShell 中的其他變數類型,環境變數及其值會由子會話繼承,例如本機背景工作,以及模組成員執行所在的會話。 這讓環境變數非常適合用來儲存父會話和子會話中所需的值。

PowerShell 環境提供者

PowerShell 環境提供者可讓您在 PowerShell 磁碟驅動器中存取 PowerShell 中的 Windows 環境變數, (Env: 磁碟驅動器) 。 此磁碟驅動器看起來像檔案系統磁碟驅動器。 若要移至 Env: 磁碟驅動器,請輸入:

Set-Location Env:

然後,若要顯示 Env: 磁碟驅動器的內容,請輸入:

Get-ChildItem

您可以從任何其他 PowerShell 磁碟驅動器檢視 Env: 磁碟驅動器中的環境變數,然後進入 Env:磁碟驅動器以檢視和變更環境變數。

環境變數物件

在 PowerShell 中,每個環境變數都是以 System.Collections.DictionaryEntry 類別實例的物件表示。

在每個 DictionaryEntry 物件中,環境變數的名稱是字典索引鍵。 變數的值是字典值。

若要在 PowerShell 中顯示環境變數,請取得代表變數的物件,然後顯示物件屬性的值。 當您在 PowerShell 中變更環境變數時,請使用與 DictionaryEntry 物件相關聯的方法。

若要在PowerShell中顯示代表環境變數的物件屬性和方法,請使用 Get-Member Cmdlet。 例如,若要顯示 Env: 磁碟驅動器中所有物件的方法和屬性,請輸入:

Get-Item -Path Env:* | Get-Member

顯示環境變數

您可以使用包含 Item 名詞的 Cmdlet (Item Cmdlet) 顯示和變更環境變數的值。 因為環境變數沒有子專案,所以 Get-Item 和 Get-ChildItem 的輸出相同。

當您參考環境變數時,請輸入 Env:磁碟驅動器名稱,後面接著變數的名稱。 例如,若要顯示 COMPUTERNAME 環境變數的值,請輸入:

Get-ChildItem Env:Computername

若要顯示所有環境變數的值,請輸入:

Get-ChildItem Env:

根據預設,PowerShell 會依擷取環境變數的順序顯示環境變數。 若要依變數名稱排序環境變數清單,請將 Get-ChildItem 命令的輸出傳送至 Sort-Object Cmdlet。 例如,從任何 PowerShell 磁碟驅動器輸入:

Get-ChildItem Env: | Sort Name

您也可以使用 Set-Location Cmdlet 進入 Env: 磁碟驅動器:

Set-Location Env:

當您在 Env: 磁碟驅動器中時,可以從路徑省略 Env: 磁碟驅動器名稱。 例如,若要顯示所有環境變數,請輸入:

Get-ChildItem

若要在 Env: 磁碟驅動器內顯示 COMPUTERNAME 變數的值,請輸入:

Get-ChildItem ComputerName

您也可以在PowerShell中使用表示式剖析器來顯示和變更環境變數的值,而不使用 Cmdlet。 若要顯示環境變數的值,請使用下列語法:

$Env:<variable-name>

例如,若要顯示 WINDIR 環境變數的值,請在 PowerShell 命令提示字元中輸入下列命令:

$Env:windir

在此語法中,貨幣符號 ($) 表示變數,而磁碟驅動器名稱則表示環境變數。

變更環境變數

若要對環境變數進行持續性變更,請使用 [控制台 (進階] 索引卷標的 [系統] 或 [進階系統設定] 專案) ,將變更儲存在登錄中。

當您在 PowerShell 中變更環境變數時,變更只會影響目前的會話。 此行為類似於 Windows 環境中 Set 命令的行為,以及 UNIX 型環境中的 Setenv 命令。

您也必須具有變更變數值的許可權。 如果您嘗試在沒有足夠許可權的情況下變更值,命令會失敗,而 PowerShell 會顯示錯誤。

您可以使用下列語法來變更變數的值,而不使用 Cmdlet:

$Env:<variable-name> = "<new-value>"

例如,若要附加 “;c:\temp“ 至 Path 環境變數的值,請使用下列語法:

$Env:path = $env:path + ";c:\temp"

您也可以使用 Item Cmdlet,例如 Set-Item、Remove-Item 和 Copy-Item 來變更環境變數的值。 例如,若要使用 Set-Item Cmdlet 附加 “;c:\temp“ 至 Path 環境變數的值,請使用下列語法:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

在此命令中,值會以括弧括住,以便將其解譯為單位。

儲存環境變數的變更

若要在每個 Windows PowerShell 工作階段中建立或變更環境變數的值,請將變更新增至您的 PowerShell 配置檔。

例如,若要將 C:\Temp 目錄新增至每個 PowerShell 工作階段中的 Path 環境變數,請將下列命令新增至您的 Windows PowerShell 配置檔。

$Env:Path = $Env:Path + ";C:\Temp"

若要將命令新增至現有的配置檔,例如 CurrentUser、AllHosts 設定檔,請輸入:

Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:Path = `
$Env:Path + ";C:\Temp"'

儲存喜好設定的環境變數

PowerShell 功能可以使用環境變數來儲存使用者喜好設定。 這些變數的運作方式類似喜好設定變數,但這些變數是由建立這些變數之會話的子會話所繼承。 如需喜好設定變數的詳細資訊,請參閱 about_preference_variables

儲存喜好設定的環境變數包括:

  • PSExecutionPolicyPreference

    儲存目前會話的執行原則集。 只有在您為單一會話設定執行原則時,才會存在此環境變數。 您可以透過兩種不同的方式執行這項操作。

    • 使用 PowerShell.exe 在命令行啟動會話,並使用其 ExecutionPolicy 參數來設定會話的執行原則。

    • 使用 Set-ExecutionPolicy Cmdlet。 使用 Scope 參數搭配 「Process」 值。

      如需詳細資訊,請參閱 about_Execution_Policies

  • PSModulePath

    儲存預設模組目錄的路徑。 當您未指定模組的完整路徑時,PowerShell 會在指定的目錄中尋找模組。

    $Env:PSModulePath 的預設值為:

    $HOME\Documents\WindowsPowerShell\Modules; $PSHOME\Modules
    

PowerShell 會在登錄中設定 「$PSHOME\Modules」 的值。 它會在每次啟動 PowerShell 時設定 “$HOME\Documents\WindowsPowerShell\Modules” 的值。

此外,安裝其他目錄中模組的安裝程式,例如 Program Files 目錄,可以將其位置附加至 PSModulePath 的值。

若要變更目前會話的預設模組目錄,請使用下列命令格式來變更 PSModulePath 環境變數的值。

例如,若要將 “C:\Program Files\Fabrikam\Modules” 目錄新增至 PSModulePath 環境變數的值,請輸入:

$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"

命令中的分號 (;) 會分隔新路徑與清單中該路徑前面的路徑。

若要變更每個會話中的 PSModulePath 值,請將先前的命令新增至 PowerShell 配置檔,或使用 Environment 類別的 SetEnvironmentVariable 方法。

下列命令會使用 GetEnvironmentVariable 方法來取得 PSModulePath 的電腦設定,以及 SetEnvironmentVariable 方法,將 C:\Program Files\Fabrikam\Modules 路徑新增至值。

$path = [System.Environment]::GetEnvironmentVariable("PSModulePath",
 "Machine")
[System.Environment]::SetEnvironmentVariable("PSModulePath", $path +
";C:\Program Files\Fabrikam\Modules", "Machine")

若要將路徑新增至用戶設定,請將目標值變更為User。

$path = [System.Environment]::GetEnvironmentVariable("PSModulePath",
 "User")
[System.Environment]::SetEnvironmentVariable("PSModulePath", $path +
";$home\Documents\Fabrikam\Modules", "User")

如需 System.Environment 類別方法的詳細資訊,請參閱 MSDN 中的 環境方法

您也可以新增命令,以將值變更至配置檔,或使用 控制台 中的 System 來變更登錄中 PSModulePath 環境變數的值。

如需詳細資訊,請參閱 about_Modules

另請參閱