如何解决Azure Yaml Pipelines Powershell任务参数中的MissingEndParenthesisInExpression问题

时间:2020-06-09 15:33:48

标签: azure-devops azure-pipelines

yaml PowerShell任务看起来像这样:

- task: PowerShell@2
  displayName: 'test'
  inputs:
    targetType: filePath
    filePath: '$(Agent.BuildDirectory)\$(artifactName)\testpath\testscript.ps1'
    arguments: '-parameterFilePath $(Agent.BuildDirectory)\$(artifactName)\mainfolder\params.json -appSecurePassword (convertTo-SecureString $(appPassword) -AsPlainText -Force) -vmSecurePassword (convertTo-SecureString $(vmPassword) -AsPlainText -Force)'

但是,出现此错误:

2020-06-09T12:54:59.6954669Z在C:\ agent_work_temp \ 66085384-0a17-4183-9832-42c481b13a84.ps1:3字符:352
2020-06-09T12:54:59.6974788Z + ... urePassword(convertTo-SecureString *** -AsPlainText -Force)
2020-06-09T12:54:59.7070327Z +〜
2020-06-09T12:54:59.7124752Z表达式中缺少结束')'。
2020-06-09T12:54:59.7142356Z + CategoryInfo:ParserError:(:) [],ParseException
2020-06-09T12:54:59.7161695Z + FullyQualifiedErrorId:MissingEndParenthesisInExpression
2020-06-09T12:54:59.7173148Z
2020-06-09T12:54:59.8102255Z ## [error] PowerShell退出,代码为“ 1”。

有人可以让我知道我在想什么吗?我确信PowerShell脚本没有问题,因为我可以在代理上手动运行它。

2 个答案:

答案 0 :(得分:0)

使用Azure YAML管道进行调试的一种方法是在运行时在管道上选择“启用系统诊断”:

enter image description here

运行后,您可以下载日志:

enter image description here

下载后,请查看azure-pipelines-expanded.yml。这将是您的管道正在运行的完整Yaml,包含所有模板。这应该使您完整了解正在执行的操作。

答案 1 :(得分:0)

以上错误消息... urePassword (convertTo-SecureString *** -AsPlainText -Force)表示问题来自powershell任务的arguments

错误Missing closing ')' in expression表示您的密码中包含“(”字符。

我在管道上进行了测试,如果密码是“ pass(word” )(不带双引号)。我收到了相同的Missing closing ')'错误消息。

arguments中引用密码时,可以尝试双引号。见下文:

-appSecurePassword (convertTo-SecureString "$(appPassword)" -AsPlainText -Force) -vmSecurePassword (convertTo-SecureString "$(vmPassword)" -AsPlainText -Force)

您还可以尝试使用反引号转义密码中的特殊字符。例如,在管道变量中定义的密码中转义特殊字符(例如“ pass`(单词”

有关更多信息,请参见Passwords Containing Special Characters In PowerShell