首页 » Powershell » Powershell环境变量目录
传统的控制台通常没有像Powershell这样的中间变量系统。 它们都是依赖机器本身的环境变量来运行的。 环境变量对于 powershell 来说变得非常重要,因为它包含操作系统的许多细节。 据悉,powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭。 并且如果环境变量被更新,它将继续保存在操作系统中,尽管其他程序也可以调用它。
读取特殊环境变量
通过环境变量读取Windows操作系统的安装路径和默认应用程序的安装路径。
PS> $env:windir
C:Windows
PS> $env:ProgramFiles
C:Program Files
通过$env:,这会提示powershell忽略基本变量:driver,而是在环境变量env:driver中查找该变量。 为了与其他变量保持一致,powershell环境变量也可以像其他变量一样使用。 例如,您可以将其插入文本中。
PS> "My computer name $env:COMPUTERNAME"
My computer name MYHome-test-01
查找环境变量
Powershell在env:虚拟驱动中保存了所有环境变量的记录,因此可以枚举所有环境变量。 一旦找到环境变量的名称php打印变量,就可以使用 $env:name 来访问它。
PS> ls env:
Name Value
---- -----
ALLUSERSPROFILE C:ProgramData
APPDATA C:Usersv-testHomeAppDataRoaming
CommonProgramFiles C:Program FilesCommon Files
COMPUTERNAME MYHome-test-01
ComSpec C:Windowssystem32cmd.exe
FP_NO_HOST_CHECK NO
HOMEDRIVE C:
HOMEPATH Usersv-testHome
创建新的环境变量
创建新环境变量的方式与创建其他变量相同,只需指定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 variable
TestVar2 Hollow, environment variable
删除和更新环境变量
在powershell中删除和更新环境变量与常规变量相同。 例如删除环境变量中的windir,
PS> del env:windir
PS> $env:windir
PS>
您可以将环境变量 $env:OS 更新为 linuxredhat。
PS> $env:OS
Windows_NT
PS> $env:OS="Redhat Linux"
PS> $env:OS
Redhat Linux
这样直接操作环境变量会不会不安全? 事实上,这是非常安全的,因为$env:中的环境变量只是机器环境变量的副本。 虽然修改过,但下次重新打开时会恢复。 (.NET模式下更新环境变量除外)
我们可以将受信任的文件夹列表追加到环境变量的末尾php打印变量,这样这些文件下的文件或脚本就可以通过相对路径直接执行,甚至省略扩展名。
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依然存在
PS> [environment]::SetEnvironmentvariable("Path", ";c:powershellscript", "User")
PS> [environment]::GetEnvironmentvariable("Path", "User")
;c:powershellscript