(22)Powershell中的環境變量

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

  1. 爲何要設置環境變量。  shell

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

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

  4. 總結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對環境變量的操做很是方便,利用數據庫,可使腳本實現可配置性。

相關文章
相關標籤/搜索