我需要设置一个env变量,该变量将在进程结束后自动清除。 process的env类型似乎是候选类型。
但是,如果我在这样的ps1脚本中设置环境变量
[Environment] :: SetEnvironmentVariable($ key,$ value,“ Process”)
并且脚本终止,当我
时,名称为$ key的变量仍然可见ls Env:\
我已经尝试过在finally块中删除环境,但是似乎没有被触发。
我的用例是将env变量传递给node.js进程。我不想使用通常推荐的.env文件,因为那意味着在磁盘上保留秘密。
这是我的代码
param(
[string]$service='serviceName',
[int]$prod=0
)
try {
function getSecret {
param([string]$secretName)
$secret = (az keyvault secret show -n $secretName --vault-name "VAULT-NAME") | ConvertFrom-Json
return $secret.value
}
function setEnv {
param([string]$key, [string]$value)
[Environment]::SetEnvironmentVariable($key, $value, "Process")
}
setEnv -key NAME_1 -value (getSecret -secretName "VALUE_1")
setEnv -key NAME_2 -value (getSecret -secretName "VALUE_2")
setEnv -key NAME_3 -value "VALUE_3"
set-location $PSScriptRoot
npm run dev
}
catch {}
finally {
Remove-Item Env:\NAME_*
}
答案 0 :(得分:1)
我认为您应该使用与创建环境变量相同的方法来删除环境变量,方法是指定环境目标,在这种情况下为"Process"
。
方法是:
[Environment]::SetEnvironmentVariable("NAME_1", $null, "Process")
[Environment]::SetEnvironmentVariable("NAME_2", $null, "Process")
[Environment]::SetEnvironmentVariable("NAME_3", $null, "Process")
请参见Environment.SetEnvironmentVariable Method
希望有帮助