【问题标题】:How do I retrieve variables in a PowerShell script running as part of a VSTS build/release?如何检索作为 VSTS 构建/发布的一部分运行的 PowerShell 脚本中的变量?
【发布时间】:2019-01-10 07:19:35
【问题描述】:

我在运行 powershell 脚本时遇到 VSTS 错误。

我在代理上安装了 powershell。但我仍然收到此错误:

“Get-VstsInput”一词未被识别为 cmdlet 的名称, 函数、脚本文件或可运行的程序。

我错过了什么。

【问题讨论】:

  • 您是在编写自定义任务,还是只是在运行 PowerShell 脚本?
  • 对不起应该提到powershell脚本。

标签: powershell azure-devops


【解决方案1】:

方法Get-VstsInput是“VSTS Task SDK for PowerShell”的一部分,可能在代理中没有安装SDK。

使用以下命令在构建服务器上安装 SDK:

Save-Module -Name VstsTaskSdk -Path .\

【讨论】:

  • 谢谢。我在代理上的 Powershell 中尝试过这个,但我明白了。 Save-Module -Name VstsTaskSdk -Path .\ PS /Users/xxxx> Save-Module -Name VstsTaskSdk -Path .\ PS /Users/xxxx> Get-VstsInput Get-VstsInput :术语“Get-VstsInput”未被识别为cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果包含路径,+ Get-VstsInput + ~~~~~~~~~~~~~
【解决方案2】:

您可以使用$env:VariableName 访问 PowerShell 脚本中的变量。唯一的例外是秘密变量。这些必须通过param 块显式传递到脚本中。

例如,如果您有一个名为 $(Foo) 的变量,您可以在 PowerShell 脚本中以 $env:Foo 的身份访问它。如果变量名称中有句点,则将它们替换为下划线。所以$(Foo.Bar) 变成了$env:Foo_Bar

这也不适用于目标计算机上的 PowerShell。如果您通过该任务在远程计算机上运行 PowerShell 脚本,则必须将任何变量作为参数传递,因为构建代理的环境变量不会填充到目标计算机上。

除非您正在编写自定义任务,否则无需使用 VSTS SDK。

【讨论】:

  • 我正在尝试获取发布标签和发布标签之后的所有提交。如何将发布标签作为变量传递?因为每次产品发布后都会发生变化。
  • @gopal 这是一个完全不同的问题。您也无法使用 Get-VstsInput cmdlet 获取标签。
  • @gopal 我不知道您是如何计算标签的,但是您可以在构建过程中读取系统变量 Build.BuildNumber 的内部版本号或读取 Release.ReleaseName 变量时的版本名称在发布过程中。
  • 如果您想访问$(System.AccessToken),您不仅需要将点替换为下划线,还要将名称大写:$env:SYSTEM_ACCESSTOKEN
  • @Monsignor Powershell 不区分大小写。您无需担心大小写。
【解决方案3】:

Get-VstsInput 用于开发构建/发布任务(不用于在 PowerShell 任务中执行脚本)。更多详情,可以参考VSTS DevOps Task SDKvsts-task-lib commands

  • 如果要在 PowerShell 任务中使用已定义的变量,可以使用 $(variableName) 格式。
  • 如果您想通过 PowerShell 任务获取构建/发布的所有可访问变量,可以使用命令ls env:

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多