如何动态创建环境变量?

时间:2015-06-18 09:18:54

标签: powershell puppet

我正在使用powershell脚本来设置一些环境变量 -

$env:FACTER_Variable_Name = $Variable_Value

FACTER用于在puppet脚本中使用它们。

我的问题是 - 变量名和变量值都是动态的,并且从文本文件中读取。

我正在尝试使用

$env:FACTER_$Variable_Name = $Variable_Value

但是$是不可接受的语法。当我用双引号括起来时,变量值不会被传递。任何建议如何动态使用它。

先谢谢

3 个答案:

答案 0 :(得分:10)

[Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User")

这种语法允许表达式代替" TestVariable",并且应该足以创建一个profile-local环境变量。第三个参数可以是"处理",这使得新的变量在Get-ChildItem env:或"机器"中可见。 - 这需要管理权限来设置变量。要检索这样的变量集,请使用[Environment]::GetEnvironmentVariable("TestVariable", "User")(如果您选择另一个,请使用匹配的范围)。

答案 1 :(得分:8)

在纯PowerShell中,类似这样:

$Variable_Name = "foo"
$FullVariable_Name = "FACTER_$Variable_Name"
$Variable_Value = "Hello World"
New-Item -Name $FullVariable_Name -value $Variable_Value -ItemType Variable -Path Env:

我使用New-Item cmdlet添加新变量,只需指定-itemtype-path

答案 2 :(得分:2)

在Powershell 5上,要动态设置当前shell中的环境变量,我使用Set-Item

>$VarName="hello"
>Set-Item "env:$VarName" world
>$env:hello
world
>

当然要保留变量我使用C#[Environment]::SetEnvironmentVariable("$VarName", "world", "User")