传统的控制台通常没有象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)"。
在处理对象的属性时,会大量的用到表达式变量。例如: