傳統的控制檯通常沒有象Powershell這麼高級的變量系統。它們都是依賴於機器自己的環境變量,進行操做 。環境變量對於powershell顯得很重要,由於它涵蓋了許多操做系統的細節信息。此外,powershell中的變量只存在於powershell內部的會話中,一旦powershell關閉,這些變量就會自生自滅。可是若是環境變量被更新了,它會繼續保存在操做系統中,即便其它程序也能夠調用它。 shell
讀取特殊的環境變量: session
經過環境變量讀取Windows操做系統的安裝路徑,和默認應用程序的安裝路徑。 ide
經過$env:,這就提示powershell忽略基本的variable:驅動器,而是去環境變量env:驅動器中尋找變量。爲了和其它變量保持一致,powershell環境變量也能夠象其它變量那樣使用。好比你能夠把它插入到文本中。 函數
查找環境變量: 測試
建立新的環境變量: spa
不用擔憂建立了環境變量會一直存在,其實$env:中的環境變量只是機器環境變量的一個副本,即便你更改了它,下一次從新打開時,又會恢復如初。(.NET方法更新環境變量除外) 操作系統
咱們能夠將受信任的文件夾列表追加到環境變量的末尾,這樣就能夠直接經過相對路徑執行這些文件下的文件或者腳本,甚至省略擴展名均可以。 3d
環境變量更新生效 code
上述對於環境變量的操做只會影響當前powershell會話,並無更新在機器上。 對象
.NET方法[environment]::SetEnvironmentvariable操做能夠馬上生效。
下面的例子對當前用戶設置環境變量,經測試,從新打開powershell仍然存在
[environment]::SetEnvironmentvariable("Path", ";c:powershellscript", "User")
[environment]::GetEnvironmentvariable("Path", "User")
Powershell中全部不是咱們本身的定義的變量都屬於驅動器變量(好比環境變量),它的前綴只是提供給咱們一個能夠訪問信息的虛擬驅動器.。例如env:windir,象env:驅動器上的一個"文件",咱們經過$訪問它,就會返回"文件"的內容。
直接訪問文件路徑:
經過驅動器直接訪問文件路徑,也支持物理驅動器,必須把文件路徑放在封閉的大括號中,由於正常的文件路徑包含兩個特殊字符":"和"",有可能會被powershell解釋器誤解。
上述的例子有一個限制,就是${$env:HOMEDRIVE/Powershellping.bat}不能識別,緣由是$後花括號中的路徑必須是具體的路徑,而不能帶返回值。
解決方法:
Invoke-Expression "`${$env:HOMEDRIVE/Powershell/ping.bat}"
由於反引號"`"放在$前,會把$解析成普通字符,解釋器會繼續去解析第二個$,發現env:HOMEDRIVE,將其替換成c,到此 Invoke-Expression的參數就變成了${C:/Powershell/ping.bat},繼續執行這個表達式就能夠了。
查看Powershell支持的驅動器,可使用Get-PSDrive查看。
Name |
Root |
Description |
A |
A: |
|
Alias |
Drive containing a view of the aliases stored in session state. |
|
C |
C: |
|
cert |
X509 Certificate Provider |
|
E |
E: |
|
Env |
The drive containing a view of the environment variables for the process. |
|
Function |
The drive containing a view of the functions stored in session state. |
|
HKCU |
HKEY_CURRENT_USER |
The software settings for the current user. |
HKLM |
HKEY_LOCAL_MACHINE |
The configuration settings for the local machine. |
Variable |
The drive containing a view of those variables stored in session state. |
|
WSMan |
Root of WsMan Config Storage. |
PSDrive中的大多都支持直接路徑訪問,例如能夠經過函數路徑,訪問一個函數的具體實現。
特殊的變量:子表達式
由 $+圓括號+表達式 構成的變量屬於子表達式變量,這樣的變量會先計算表達式,而後把表達式的值返回。
例如 變量$(3+6),能夠簡寫成(3+6),甚至能夠簡寫成3+6。子表達式變量也能夠嵌套在文本中,例如"result=$(3+6)"。
在處理對象的屬性時,會大量的用到表達式變量。例如: