代码之家  ›  专栏  ›  技术社区  ›  Eugene Podskal

当TFS预定义变量被称为只读时,为什么可以设置它们?

  •  1
  • Eugene Podskal  · 技术社区  · 7 年前

    https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=tfs-2018

    这些变量由系统自动设置且为只读(例外情况是Build.Clean和System.Debug。)

    尽管如此,如果您尝试使用以下任务创建vnext构建

    1. 内联Powershell- Write-Host $env:BUILD_SOURCEVERSION
    2. Write-Host ("##vso[task.setvariable variable=build.sourceversion;]"+'someNewValue')
    3. 内联Powershell- 写入主机$env:BUILD_SOURCEVERSION

    任务2不会失败,最后一个任务将输出

    2018-10-24T07:37:23.1232438Z新值

    所以,

    1. 不是我看错了文件,就是因为他们不清楚
    1 回复  |  直到 7 年前
        1
  •  1
  •   Andy Li-MSFT    7 年前

    这是预期的行为。

    预定义变量由系统自动设置且为只读。

    但是,如果您定义了 同名 PATH ),管道变量 值重写代理主机的环境变量。

    看到了吗 Environment variables 详情。

    因此,在您的场景中,实际上您定义了一个与预定义变量同名的新管道变量,但并没有真正覆盖预定义变量。它们只能用在管道上。。。


    更新:

    Environment Variables 并对他们的可读性提出了一些稍微矛盾的说法。实际上,所有变量(*预定义、构建、环境…)基本上都作为环境变量工作 mentioned here

    顺便说一句,您可以通过 get-childitem -path env:* 在管道中*

    $environmentVars = get-childitem -path env:*
    foreach($var in $environmentVars)
    {
     $keyname = $var.Key
     $keyvalue = $var.Value
    
     Write-Output "${keyname}: $keyvalue"
    }