PowerShell 技能连载 - 设置环境变量

有些时候您会见到一些脚本使用 Select-Object 向现有的对象附加信息,类似以下代码:

1
2
3
4
5
6
Get-Process |
Select-Object -Property *, Sender|
ForEach-Object {
$_.Sender = $env:COMPUTERNAME
$_
}

它可以工作,但是 Select-Object 创建了一个完整的对象拷贝,所以这种方法速度很慢而且改变了对象的类型。您可能注意到了 PowerShell 不再使用正常的表格方式输出进程对象,也是因为这个原因。

如果您想设置环境变量,env: 驱动器只能修改进程级别的环境变量。要设置用户或者机器级别的环境变量,请试试这个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Set-EnvironmentVariable
{
[CmdletBinding()]
param
(
[Parameter(Mandatory)][String]
$VariableName,

[Parameter(Mandatory)][String]
$VariableValue,

[Parameter(Mandatory)][EnvironmentVariableTarget]
$Target
)

[Environment]::SetEnvironmentVariable($VariableName, $VariableValue, $Target)
}

请注意 $Target 变量如何使用特殊的数据类型 “EnvironmentVariableTarget” ,当您在 PowerShell ISE 或其它带有 IntelliSense 功能的编辑器中,-Target 参数的可选项有 “Process”、”User” 和 “Machine”。

以下是如何在用户级别创建名为 “Test”,值为 12 的环境变量的方法:

1
2
3
PS C:\> Set-EnvironmentVariable -VariableName test -VariableValue 12 -Target User

PS C:\>

PowerShell 技能连载 - 设置环境变量

http://blog.vichamp.com/2017/12/29/settingenvironmentvariables/

作者

吴波

发布于

2017-12-29

更新于

2022-07-06

许可协议

评论