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
我在 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