传统的控制台一般没有象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
|