傳統的控制臺一般沒有象Powershell這么高級的變量系統。它們都是依賴于機器本身的環境變量,進行操作 。環境變量對于powershell顯得很重要,因為它涵蓋了許多操作系統的細節信息。此外,powershell中的變量只存在于powershell內部的會話中,一旦powershell關閉,這些變量就會自生自滅。但是如果環境變量被更新了,它會繼續保存在操作系統中,即使其它程序也可以調用它。
讀取特殊的環境變量
通過環境變量讀取Windows操作系統的安裝路徑,和默認應用程序的安裝路徑。
1
2
3
4
|
PS> $ env :windir C:\Windows PS> $ env :ProgramFiles C:\Program Files |
通過$env:,這就提示powershell忽略基本的variable:驅動器,而是去環境變量env:驅動器中尋找變量。為了和其它變量保持一致,powershell環境變量也可以象其它變量那樣使用。比如你可以把它插入到文本中。
1
2
|
PS> "My computer name $env:COMPUTERNAME" My computer name MYHome- test -01 |
查找環境變量
Powershell把所有環境變量的記錄保存在env: 虛擬驅動中,因此可以列出所有環境變量 。一旦查出環境變量的名字就可以使用$env:name 訪問了。
1
2
3
4
5
6
7
8
9
10
11
|
PS> ls env : Name Value ---- ----- ALLUSERSPROFILE C:\ProgramData APPDATA C:\User\sv- test \Home\AppData\Roaming CommonProgramFiles C:\Program Files\Common Files COMPUTERNAME MYHome- test -01 ComSpec C:\Windows\system32\cmd.exe FP_NO_HOST_CHECK NO HOMEDRIVE C: HOMEPATH Users\ v - test \Home |
創建新的環境變量
創建新環境變量的方法和創建其它變量一樣,只需要指定env:虛擬驅動器即可
1
2
3
4
5
6
7
8
|
PS> $ env :TestVar1= "This is my environment variable" PS> $ env :TestVar2= "Hollow, environment variable" PS> ls env :Test* Name Value ---- ----- TestVar1 This is my environment variable TestVar2 Hollow, environment variable |
刪除和更新環境變量
在powershell刪除和更新環境變量和常規變量一樣。例如要刪除環境變量中的 windir,
1
2
3
|
PS> del env :windir PS> $ env :windir PS> |
可以更新環境變量$env:OS 為linux redhat。
1
2
3
4
5
|
PS> $ env :OS Windows_NT PS> $ env :OS= "Redhat Linux" PS> $ env :OS Redhat Linux |
這樣直接操作環境變量,會不會不安全?事實上很安全,因為$env:中的環境變量只是機器環境變量的一個副本,即使你更改了它,下一次重新打開時,又會恢復如初。(.NET方法更新環境變量除外)
我們可以將受信任的文件夾列表追加到環境變量的末尾,這樣就可以直接通過相對路徑執行這些文件下的文件或者腳本,甚至省略擴展名都可以。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
PS> md .myscript Directory: Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2011 /11/29 18:20 myscript PS> cd .myscript PSmyscript> "write-host 'Hollow , Powershell'" > hollow.ps1 PSmyscript> .hollow.ps1 Hollow , Powershell PSmyscript> cd .. PS> $ env :Path+= ";C:PowerShellmyscript" PS> hollow.ps1 Hollow , Powershell PS> hollow Hollow , Powershell |
環境變量更新生效
上述對于環境變量的操作只會影響當前powershell會話,并沒有更新在機器上。
.NET方法[environment]::SetEnvironmentvariable操作可以立刻生效。
下面的例子對當前用戶設置環境變量,經測試,重新打開powershell仍然存在
1
2
3
|
PS> [environment]::SetEnvironmentvariable( "Path" , ";c:\powershellscript" , "User" ) PS> [environment]::GetEnvironmentvariable( "Path" , "User" ) ;c:\powershellscript |