如何将 windows 环境变量设置为管道的一部分?

How can I set a windows environment variable as part of a pipeline?

我有一个 yaml 管道需要在 VM 上设置(如果不存在则创建)一个 windows 环境变量,该变量将由 VM 上的另一个程序使用。我该怎么做?

我已经尝试查看 (以及其他文章),但 none 的答案有效。他们要么需要安装 .NET SDK,要么没有失败但没有创建变量。我的印象是这应该可以使用 powershell,因此与我试过的那个问题的答案之一非常相似:

- task: PowerShell@2
      displayName: Set environment variables.
      inputs:
        targetType: 'inline'
        script: |
          Write-Host "##vso[task.setvariable variable=MY_KEY;]$(TestSecret)"

就像我说的,这并没有失败,但是当我检查 VM 环境变量时 'MY_KEY' 不存在。

更新

根据 Lee_Dailey 的以下建议,我尝试了以下操作:

- task: PowerShell@2
      displayName: Set environment variables.
      inputs:
        targetType: 'inline'
        script: | 
          [System.Environment]::SetEnvironmentVariable("MY_KEY", "$($env:TestSecret)", "Machine")
      env:
        TestSecret: $(TestSecret)

我还尝试仅使用“testKey”而不是使用变量来替换密钥的实际值,以及设置 [Environment] 而不是 [System.Environment]。在所有情况下,管道 运行 都没有错误,但没有在名称为 MY_KEY.

的 VM 上创建环境/系统变量

我通过将计算机名称写入控制台,在正确的机器上仔细检查了它 运行,所以我知道它不会以某种方式在另一台机器上这样做。

事实证明,我之前的一项尝试确实奏效了。但是,我检查变量的方式并没有接受它(命令提示符使用 'set' 来读取它们,没有重新启动会话)。所以我检查了系统设置 GUI,发现它毕竟已经设置好了。我最终得到了这个:

- task: PowerShell@2
      displayName: Set environment variables.
      inputs:
        targetType: 'inline'
        script: | 
          [System.Environment]::SetEnvironmentVariable("MY_KEY", "$(TestSecret)", [System.EnvironmentVariableTarget]::Machine)