本節介紹Powershell 中環境變量的查看和使用,主要包括如下內容:sql
爲何要設置環境變量。 shell
Powershell 中環境變量的查看。數據庫
Powershell 中環境變量的更改。安全
總結bash
1. 爲何要設置環境變量服務器
使用過 Java 語言的必定知道在安裝完 JDK 以後要配置環境變量JAVA_HOME、CLASSPATH、PATH , 其目的就是使其指向 JDK 的bin 目錄,這樣子在控制檯中編譯,或是在其餘路徑下執行Java 程序時,無需指定一長串的bin 路徑。網絡
環境變量存儲了操做系統環境相關的信息(由操做系統和其餘程序使用的數據)。此信息包括操做系統路徑、操做系統使用的處理器的數量以及臨時文件夾的位置等詳細信息。例如,WINDIR 環境變量包含 Windows 安裝目錄的位置。程序能夠查詢此變量的值以肯定 Windows 操做系統文件的位置。因而可知,設置環境變量的好處是多個獨立的程序共享該變量所表明的值。ide
PowerShell 也能夠查看和更改 Windows 環境變量,包括在註冊表中設置的變量以及爲特定會話設置的變量。PowerShell Environment 模塊簡化了這個過程,使查看和更改環境變量變得更容易。spa
與 PowerShell 中其餘類型的變量不一樣,環境變量和它們的值由子會話(如本地後臺做業和運行模塊成員的會話)來繼承。這就使環境變量很是適合存儲父會話和子會話中都須要的值。通俗點將就是在好比在腳本A的開始處設置了某個環境變量,而腳本B 調用腳本A ,則在腳本 B 或是調用 B 的腳本中都有效。操作系統
2.Powershell 查看環境變量
PowerShell Environment 模塊提供並簡化了對環境變量的訪問。能夠在 PowerShell 的Windows PowerShell 驅動器(Env: 驅動器)中訪問 Windows 環境變量。
此驅動器與文件系統驅動器很是類似。例如能夠經過cmd命令訪問環境變量:
PS C:\> cd env: PS Env:\> dir Name Value ---- ----- _DFX_INSTALL_UNSIGNED_DRIVER 1 ALLUSERSPROFILE C:\Documents and Settings\All Users APPDATA C:\Documents and Settings\Administrator\Application Data CLIENTNAME Console CommonProgramFiles C:\Program Files\Common Files ComSpec C:\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK NO HOMEDRIVE C: Path C:\Python34\;C:\Python34\Scripts;C:\WINDOWS\system32;C:\WINDOWS;... ...
以上環境變量中的 Path 你們確定比較熟悉。以上命令中的 cd 實際上是 Set-Location 命令的別名,dir 是 Get-ChildItem 的別名。能夠經過咱們以前講過的 Get-Alias 命令來驗證,例如:
PS C:\> Get-Alias cd CommandType Name Definition ----------- ---- ---------- Alias cd Set-Location PS C:\> Get-Alias Dir CommandType Name Definition ----------- ---- ---------- Alias dir Get-ChildItem
因此也能夠經過如下 Powershell 命令查看環境變量:
PS C:\> Set-Location env: PS Env:\> Get-ChildItem Name Value ---- ----- _DFX_INSTALL_UNSIGNED_DRIVER 1 ALLUSERSPROFILE C:\Documents and Settings\All Users APPDATA C:\Documents and Settings\Administrator\Application Data CLIENTNAME Console CommonProgramFiles C:\Program Files\Common Files ComSpec C:\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK NO HOMEDRIVE C: Path C:\Python34\;C:\Python34\Scripts;C:\WINDOWS\system32;C:\WINDOWS;... ...
也能夠經過如下一條命令查看環境變量:
PS C:\> Get-ChildItem env: Name Value ---- ----- _DFX_INSTALL_UNSIGNED_DRIVER 1 ALLUSERSPROFILE C:\Documents and Settings\All Users APPDATA C:\Documents and Settings\Administrator\Application Data
在 PowerShell 中,每一個環境變量都經過 System.Collections.Dictionary Entry 類的實例的對象來表示。在每一個 DictionaryEntry 對象中,環境變量的名稱爲鍵(Key),環境變量的值爲鍵值(Value)。
因此在 PowerShell 能夠經過環境變量的鍵來獲取對應的值,例如:
PS C:\> Get-ChildItem env:path Name Value ---- ----- Path C:\Python34\;C:\Python34\Scripts;C:\WINDO..
3. Powershell更改環境變量
在 PowerShell 中更改環境變量時(經過在命令行更改),所作的更改僅影響當前會話。當前會話關閉,所作的更改將會丟失。須要注意的是,在命令行中更改環境變量時,須要以管理員權限執行命令。
若是要對環境變量進行永久性更改,可使用「控制面板」中的「系統」(「高級」選項卡或「高級系統設置」選項)將更改存儲在註冊表中。也能夠把更改添加倒 PowerShell 配置文件中。
可使用如下語法,在不使用 cmdlet 的狀況下更改環境變量的值(注意變量名稱不包含$符號):
$env:<變量名稱> = "<新值>"
例如:
$env:path = $env:path + ";c:\temp"
以上語句將 ";c:\temp"追加到 Path 環境變量的值中。也可使用 Set-Item、Remove-Item 和 Copy-Item 等 Item cmdlet 來更改環境變量的值。例如:
set-item -path env:path -value ($env:path + ";c:\temp")
可使用如下命令把所作的更改添加到 Powershell 配置文件中:
add-content -path $profile.CurrentUserAllHosts -value '$env:path = $env:path + ";c:\temp"'
舉一個在實際應用中的例子。好比爲了安全考慮,公司內部的某個程序須要經過代理(Proxy)來訪問外部的某個服務器,而又不想讓其餘的程序也使用該Proxy,因此能夠在啓動該程序以前先設置環境變量 Proxy ,這樣該程序就能夠正常鏈接外部的網絡,因爲該Proxy 是在會話層面配置的,因此當該程序關閉時,設置的proxy也自動失效。因此能夠在調用程序以前,加入如下語句:
$myProxy = "192.125.12.18" if( ($proxy -eq $null ) -or ($proxy -eq "") ) { $env:proxy = $myProxy Write-Verbose "the proxy has been set to $myProxy" }
因爲應用的升級以及出於安全方面的考慮,該 Proxy 有可能發生變化,因此實際使用時,會把該$myProxy 的值存儲在數據中,即在啓動應用程序以前,腳本會先在數據中查詢該Proxy的值(會在後續文章中分享經過Powershell鏈接數據庫以及執行sql語句),而後再添加到環境變量中,實現應用程序的可配置性:之後若是須要須要更改proxy,只需執行 update sql語句,無需對腳本進行更改。
總結
Powershell對環境變量的操做很是方便,利用數據庫,可使腳本實現可配置性。