Azure 管道 powershell 脚本 returns 不正确的结果

Azure pipeline powershell script returns incorrect result

我在 Azure 管道中有以下任务:

      - task: PowerShell@2
        displayName: Identiying the version fro the .csproj file
        inputs:
          targetType: "inline"
          script: |
            $xml = [Xml] (Get-Content ./src/MyProject/MyProject.csproj)
            $version = $xml.Project.PropertyGroup.Version
            echo $version
            echo "##vso[task.setvariable variable=version]$version"

      - task: PowerShell@2
        displayName: Checking if the git tag with current version already
        inputs:
          targetType: "inline"
          script: |
            $ver=git tag -l $(version)                
            Write-Host "Project file version is $(version)"
            Write-Host "Received from git tag $ver"
            if ($(version) -eq $ver) {
                    Write-Error "Tag $(version) already exists" 
                }
            else {
              Write-Host "Tag does not exist"
              }

它基本上是从 csproj 文件中提取版本,创建管道参数,然后调用 git tag -l 来检查该版本是否已作为标记存在。 这里的问题是我们从 .csproj 文件和 git 中提取的版本是相同的,但 if 命令未被评估而是执行了 else。 这是 azure 管道的输出日志:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\a\_temp\e1cb6bb9-fbd4-4282-a4cc-e74f89ac7660.ps1'"
Project file version is 0.2.5
Received from git tag 0.2.5
Tag does not exist

既然是平等的,为什么会这样呢?结果应该是 Tag 0.2.5 already exists

如果 $(version) -eq $ver 为假,那么它们可能是不同的类型?尝试手动转换为字符串:

if ("$(version)" -eq "$ver") {

关于您的评论 - 我不太熟悉 az 管道,但也许您可以像这样转换您的远程变量?

[string]($(version))

类型也是对象,因此要将当前类型视为字符串,请改用 $var.GetType().name