傳統的控制台一般沒有象Powershell這麼進階的變數系統。它們都是依賴於機器本身的環境變數,進行操作 。環境變數對於powershell顯得很重要,因為它涵蓋了許多作業系統的細節資訊。此外,powershell中的變數只存在於powershell內部的會話中,一旦powershell關閉,這些變數就會自生自滅。但是如果環境變數被更新了,它會繼續儲存在作業系統中,即使其它程式也可以調用它。
讀取特殊的環境變數
通過環境變數讀取Windows作業系統的安裝路徑,和預設應用程式的安裝路徑。
PS> $env:windirC:\WindowsPS> $env:ProgramFilesC:\Program Files
通過$env:,這就提示powershell忽略基本的variable:磁碟機,而是去環境變數env:磁碟機中尋找變數。為了和其它變數保持一致,powershell環境變數也可以象其它變數那樣使用。比如你可以把它插入到文本中。
PS> "My computer name $env:COMPUTERNAME"My computer name MYHome-test-01
尋找環境變數
Powershell把所有環境變數的記錄儲存在env: 虛擬驅動中,因此可以列出所有環境變數 。一旦查出環境變數的名字就可以使用$env:name 訪問了。
PS> ls env:Name Value---- -----ALLUSERSPROFILE C:\ProgramDataAPPDATA C:\User\sv-test\Home\AppData\RoamingCommonProgramFiles C:\Program Files\Common FilesCOMPUTERNAME MYHome-test-01ComSpec C:\Windows\system32\cmd.exeFP_NO_HOST_CHECK NOHOMEDRIVE C:HOMEPATH Users\v-test\Home
建立新的環境變數
建立新環境變數的方法和建立其它變數一樣,只需要指定env:虛擬磁碟機即可
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 variableTestVar2 Hollow, environment variable
刪除和更新環境變數
在powershell刪除和更新環境變數和常規變數一樣。例如要刪除環境變數中的 windir,
PS> del env:windirPS> $env:windirPS>
可以更新環境變數$env:OS 為linux redhat。
PS> $env:OSWindows_NTPS> $env:OS="Redhat Linux"PS> $env:OSRedhat Linux
這樣直接作業環境變數,會不會不安全?事實上很安全,因為$env:中的環境變數只是機器環境變數的一個副本,即使你更改了它,下一次重新開啟時,又會恢複如初。(.NET方法更新環境變數除外)
我們可以將受信任的資料夾清單追加到環境變數的末尾,這樣就可以直接通過相對路徑執行這些檔案下的檔案或者指令碼,甚至省略副檔名都可以。
PS> md .myscript Directory:Mode LastWriteTime Length Name---- ------------- ------ ----d---- 2011/11/29 18:20 myscriptPS> cd .myscriptPSmyscript> "write-host 'Hollow , Powershell'" > hollow.ps1PSmyscript> .hollow.ps1Hollow , PowershellPSmyscript> cd ..PS> $env:Path+=";C:PowerShellmyscript"PS> hollow.ps1Hollow , PowershellPS> hollowHollow , Powershell
環境變數更新生效
上述對於環境變數的操作只會影響當前powershell會話,並沒有更新在機器上。
.NET方法[environment]::SetEnvironmentvariable操作可以立刻生效。
下面的例子對目前使用者設定環境變數,經測試,重新開啟powershell仍然存在
PS> [environment]::SetEnvironmentvariable("Path", ";c:\powershellscript", "User")PS> [environment]::GetEnvironmentvariable("Path", "User");c:\powershellscript