You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps的Powershell任务中Where-Object多条件过滤失效如何解决

错误原因与修复方案

核心问题出在Where-Object的条件写法错误,共2处:

  • 你将属性名用双引号包裹后直接参与比较,本质是对两个固定字符串做相等判断,完全没有读取管道中构建对象的属性值:
    原写法中的"status" -eq "inProgress"实际是判断字符串"status"是否等于字符串"inProgress",结果永远为$false,你之前单条件能生效大概率是用了无脚本块的简化写法Where-Object status -eq "inProgress",和当前脚本块写法逻辑完全不同。
  • 嵌套属性templateParameters.param1需要通过管道变量$_访问,不能直接写字符串做比较。

正确的Where-Object写法

将原来的过滤行替换为以下内容即可:

[array]$runningBuilds = $GET_BUILDS_BY_DEFINITION_RESPONSE.value | Where-Object {$_.status -eq "inProgress" -and $_.templateParameters.param1 -eq "myparam"}

额外注意事项

  • 你原代码中生成认证信息时用到的$user变量没有定义,Azure DevOps PAT认证的用户名可留空,建议将对应行修改为:
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes((":$token")))
    
  • 若过滤后仍无结果,可先执行$GET_BUILDS_BY_DEFINITION_RESPONSE.value | ConvertTo-Json -Depth 10输出完整的构建对象结构,确认templateParameters下是否存在param1属性,避免拼写大小写不匹配问题。

内容的提问来源于stack exchange,提问作者Sibtain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:15:08