无法在 Azure DevOps 管道中运行 PowerShell 脚本“解析错误”

时间:2021-03-16 15:28:09

标签: azure azure-devops azure-devops-pipelines

所以,我是 Azure Devops 的新手(但不是 Azure 或 PowerShell)。我的管道中有两个脚本作为任务,第一个运行完美(注意:没有 az 模块命令)。第二个失败(它有一个 Az 调用)。我在管道中得到的错误是:

ParserError: /home/vsts/work/_temp/3f7b3ce1-6afb-46f3-b00d-1efe35fbac71.ps1:5
Line |
   5 |  } else {
     |  ~
     | Unexpected token '}' in expression or statement.

事情就是这样......我的脚本中没有 '} else {' 或者至少,我删除了它并得到了同样的错误。

因此,导致这种情况的原因比我的脚本更为根本。我假设“/home/vsts/work/_temp/3f7b3ce1-6afb-46f3-b00d-1efe35fbac71.ps1”是我复制到远程系统的脚本,但似乎并非如此。

有什么办法,我可以找出那个文件是什么?

任务是 'PowerShell@2',设置了 'pwsh: true'。 谢谢!

YAML:

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'Pay-As-You-Go(<guid>)'
    subscriptionId: '<guid>'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'project-Test'
    location: 'East US 2'
    templateLocation: 'Linked artifact'
    csmFile: 'deploy.template.json'
    csmParametersFile: 'deploy.parameters.json'
    deploymentMode: 'Incremental'
    deploymentOutputs: 'DeploymentOutput'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: $(System.DefaultWorkingDirectory)/Get-ArmDeploymentOutput.ps1 -ArmOutputString '$(DeploymentOutput)' -MakeOutput -ErrorAction Stop
    pwsh: true
  displayName: Get-ArmDeploymentOutput

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: $(System.DefaultWorkingDirectory)/Set-AzWebAppIPRestriction.ps1 -Priority 100 -Action 'Allow' -WebAppId '$(WebAppId)' -PipId '$(gwpipId)'' -ErrorAction Stop
    pwsh: true
  displayName: Set-AzWebAppIPRestriction

1 个答案:

答案 0 :(得分:0)

我发现您的第二个 powershell 任务的脚本中的 ' 中有一个额外的 -PipId '$(gwpipId)''。也许它导致了错误。

script: $(System.DefaultWorkingDirectory)/Set-AzWebAppIPRestriction.ps1 -Priority 100 -Action 'Allow' -WebAppId '$(WebAppId)' -PipId '$(gwpipId)'' -ErrorAction Stop

因为您在 .ps1 文件中运行脚本。您应该将 powershell tasktargetType 参数更改为 filePath。并在 filePath 参数中设置 .ps1 文件。见下例:

steps:
- task: PowerShell@2
  displayName: 'PowerShell Script'
  inputs:
    targetType: filePath
    filePath: '$(System.DefaultWorkingDirectory)/Set-AzWebAppIPRestriction.ps1'
    arguments: '-Priority 100 -Action "Allow" -WebAppId "$(WebAppId)" -PipId "$(gwpipId)" -ErrorAction Stop'
    pwsh: true

如果您在脚本中使用 azure powershell 模块。您可以使用 Azure powershell task 而不是 powershell 任务..