(22)Powershell中的環境變量

    本節介紹Powershell 中環境變量的查看和使用,主要包括以下內容:

  1. 爲什麼要設置環境變量。  

  2. Powershell 中環境變量的查看。

  3. Powershell 中環境變量的更改。

  4. 總結


1. 爲什麼要設置環境變量

    使用過 Java 語言的一定知道在安裝完 JDK 之後要配置環境變量JAVA_HOME、CLASSPATH、PATH , 其目的就是使其指向 JDK 的bin 目錄,這樣子在控制檯中編譯,或是在其他路徑下執行Java 程序時,無需指定一長串的bin 路徑。

    環境變量存儲了操作系統環境相關的信息(由操作系統和其他程序使用的數據)。此信息包括操作系統路徑、操作系統使用的處理器的數量以及臨時文件夾的位置等詳細信息。例如,WINDIR 環境變量包含 Windows 安裝目錄的位置。程序可以查詢此變量的值以確定 Windows 操作系統文件的位置。由此可見,設置環境變量的好處是多個獨立的程序共享該變量所代表的值


    PowerShell 也可以查看和更改 Windows 環境變量,包括在註冊表中設置的變量以及爲特定會話設置的變量。PowerShell Environment 模塊簡化了這個過程,使查看和更改環境變量變得更容易。

    與 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對環境變量的操作非常方便,利用數據庫,可以使腳本實現可配置性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章