我正在使用powershell脚本来设置一些环境变量 -
$env:FACTER_Variable_Name = $Variable_Value
FACTER用于在puppet脚本中使用它们。
我的问题是 - 变量名和变量值都是动态的,并且从文本文件中读取。
我正在尝试使用
$env:FACTER_$Variable_Name = $Variable_Value
但是$是不可接受的语法。当我用双引号括起来时,变量值不会被传递。任何建议如何动态使用它。
先谢谢
答案 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")