首页 > 解决方案 > EnvironmentVariableTarget.Process 在进程结束后继续存在

问题描述

我需要设置一个环境变量,一旦它的进程结束,它就会自动清除。process env 类型似乎是一个候选者。

但是,如果我在这样的 ps1 脚本中设置环境变量

[环境]::SetEnvironmentVariable($key, $value, "Process")

并且脚本终止,名称为 $key 的变量在我仍然可见时

ls 环境:\

我已经尝试在 finally 块中删除环境,但它似乎没有被触发。

我的用例是将环境变量传递给 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_*
}

标签: node.jspowershellenvironment-variables

解决方案


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

这样做的方法是:

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

请参阅Environment.SetEnvironmentVariable 方法

希望有帮助


推荐阅读