本节介绍Powershell 中环境变量的查看和使用,主要包括如下内容:sql
为何要设置环境变量。 shell
Powershell 中环境变量的查看。数据库
Powershell 中环境变量的更改。安全
总结bash
1. 为何要设置环境变量服务器
使用过 Java 语言的必定知道在安装完 JDK 以后要配置环境变量JAVA_HOME、CLASSPATH、PATH , 其目的就是使其指向 JDK 的bin 目录,这样子在控制台中编译,或是在其余路径下执行Java 程序时,无需指定一长串的bin 路径。网络
环境变量存储了操做系统环境相关的信息(由操做系统和其余程序使用的数据)。此信息包括操做系统路径、操做系统使用的处理器的数量以及临时文件夹的位置等详细信息。例如,WINDIR 环境变量包含 Windows 安装目录的位置。程序能够查询此变量的值以肯定 Windows 操做系统文件的位置。因而可知,设置环境变量的好处是多个独立的程序共享该变量所表明的值。ide
PowerShell 也能够查看和更改 Windows 环境变量,包括在注册表中设置的变量以及为特定会话设置的变量。PowerShell Environment 模块简化了这个过程,使查看和更改环境变量变得更容易。spa
与 PowerShell 中其余类型的变量不一样,环境变量和它们的值由子会话(如本地后台做业和运行模块成员的会话)来继承。这就使环境变量很是适合存储父会话和子会话中都须要的值。通俗点将就是在好比在脚本A的开始处设置了某个环境变量,而脚本B 调用脚本A ,则在脚本 B 或是调用 B 的脚本中都有效。操作系统
2.Powershell 查看环境变量
PowerShell Environment 模块提供并简化了对环境变量的访问。能够在 PowerShell 的Windows PowerShell 驱动器(Env: 驱动器)中访问 Windows 环境变量。
此驱动器与文件系统驱动器很是类似。例如能够经过cmd命令访问环境变量:
PS C:\> cd env: PS Env:\> dir Name Value ---- ----- _DFX_INSTALL_UNSIGNED_DRIVER 1 ALLUSERSPROFILE C:\Documents and Settings\All Users APPDATA C:\Documents and Settings\Administrator\Application Data CLIENTNAME Console CommonProgramFiles C:\Program Files\Common Files ComSpec C:\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK NO HOMEDRIVE C: Path C:\Python34\;C:\Python34\Scripts;C:\WINDOWS\system32;C:\WINDOWS;... ...
以上环境变量中的 Path 你们确定比较熟悉。以上命令中的 cd 实际上是 Set-Location 命令的别名,dir 是 Get-ChildItem 的别名。能够经过咱们以前讲过的 Get-Alias 命令来验证,例如:
PS C:\> Get-Alias cd CommandType Name Definition ----------- ---- ---------- Alias cd Set-Location PS C:\> Get-Alias Dir CommandType Name Definition ----------- ---- ---------- Alias dir Get-ChildItem
因此也能够经过如下 Powershell 命令查看环境变量:
PS C:\> Set-Location env: PS Env:\> Get-ChildItem Name Value ---- ----- _DFX_INSTALL_UNSIGNED_DRIVER 1 ALLUSERSPROFILE C:\Documents and Settings\All Users APPDATA C:\Documents and Settings\Administrator\Application Data CLIENTNAME Console CommonProgramFiles C:\Program Files\Common Files ComSpec C:\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK NO HOMEDRIVE C: Path C:\Python34\;C:\Python34\Scripts;C:\WINDOWS\system32;C:\WINDOWS;... ...
也能够经过如下一条命令查看环境变量:
PS C:\> Get-ChildItem env: Name Value ---- ----- _DFX_INSTALL_UNSIGNED_DRIVER 1 ALLUSERSPROFILE C:\Documents and Settings\All Users APPDATA C:\Documents and Settings\Administrator\Application Data
在 PowerShell 中,每一个环境变量都经过 System.Collections.Dictionary Entry 类的实例的对象来表示。在每一个 DictionaryEntry 对象中,环境变量的名称为键(Key),环境变量的值为键值(Value)。
因此在 PowerShell 能够经过环境变量的键来获取对应的值,例如:
PS C:\> Get-ChildItem env:path Name Value ---- ----- Path C:\Python34\;C:\Python34\Scripts;C:\WINDO..
3. Powershell更改环境变量
在 PowerShell 中更改环境变量时(经过在命令行更改),所作的更改仅影响当前会话。当前会话关闭,所作的更改将会丢失。须要注意的是,在命令行中更改环境变量时,须要以管理员权限执行命令。
若是要对环境变量进行永久性更改,可使用“控制面板”中的“系统”(“高级”选项卡或“高级系统设置”选项)将更改存储在注册表中。也能够把更改添加倒 PowerShell 配置文件中。
可使用如下语法,在不使用 cmdlet 的状况下更改环境变量的值(注意变量名称不包含$符号):
$env:<变量名称> = "<新值>"
例如:
$env:path = $env:path + ";c:\temp"
以上语句将 ";c:\temp"追加到 Path 环境变量的值中。也可使用 Set-Item、Remove-Item 和 Copy-Item 等 Item cmdlet 来更改环境变量的值。例如:
set-item -path env:path -value ($env:path + ";c:\temp")
可使用如下命令把所作的更改添加到 Powershell 配置文件中:
add-content -path $profile.CurrentUserAllHosts -value '$env:path = $env:path + ";c:\temp"'
举一个在实际应用中的例子。好比为了安全考虑,公司内部的某个程序须要经过代理(Proxy)来访问外部的某个服务器,而又不想让其余的程序也使用该Proxy,因此能够在启动该程序以前先设置环境变量 Proxy ,这样该程序就能够正常链接外部的网络,因为该Proxy 是在会话层面配置的,因此当该程序关闭时,设置的proxy也自动失效。因此能够在调用程序以前,加入如下语句:
$myProxy = "192.125.12.18" if( ($proxy -eq $null ) -or ($proxy -eq "") ) { $env:proxy = $myProxy Write-Verbose "the proxy has been set to $myProxy" }
因为应用的升级以及出于安全方面的考虑,该 Proxy 有可能发生变化,因此实际使用时,会把该$myProxy 的值存储在数据中,即在启动应用程序以前,脚本会先在数据中查询该Proxy的值(会在后续文章中分享经过Powershell链接数据库以及执行sql语句),而后再添加到环境变量中,实现应用程序的可配置性:之后若是须要须要更改proxy,只需执行 update sql语句,无需对脚本进行更改。
总结
Powershell对环境变量的操做很是方便,利用数据库,可使脚本实现可配置性。