EnvironmentVariableTarget.Process在进程结束后仍然存在

时间:2019-02-21 07:40:54

标签: node.js powershell environment-variables

我需要设置一个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_*
}

1 个答案:

答案 0 :(得分:1)

我认为您应该使用与创建环境变量相同的方法来删除环境变量,方法是指定环境目标,在这种情况下为"Process"

方法是:

[Environment]::SetEnvironmentVariable("NAME_1", $null, "Process")
[Environment]::SetEnvironmentVariable("NAME_2", $null, "Process")
[Environment]::SetEnvironmentVariable("NAME_3", $null, "Process")

请参见Environment.SetEnvironmentVariable Method

希望有帮助