如何通过az devops CLI或API查询含内联PowerShell任务的ADO流水线与发布?
用Azure DevOps CLI/API筛选含内联PowerShell任务的流水线与发布
可以通过Azure DevOps CLI结合REST API实现这个需求,以下是具体操作步骤:
一、筛选流水线中的内联PowerShell任务
1. 使用Azure DevOps CLI
首先完成基础配置:
# 登录Azure az login # 设置默认组织和项目 az devops configure --defaults organization=https://dev.azure.com/你的组织名 project=你的项目名
获取所有流水线ID
az pipelines list --query "[].id" -o tsv
遍历流水线并筛选内联PowerShell任务
- YAML流水线:通过
az pipelines show获取YAML内容,查找包含powershell任务且使用script:定义内联脚本的条目(而非filePath:引用外部文件):
# 替换为目标流水线ID PIPELINE_ID=123 az pipelines show --id $PIPELINE_ID --query "process.yaml" | grep -A 5 -B 2 "powershell:"
通过输出可快速定位内联脚本段。
- 经典流水线:CLI暂不支持直接获取经典流水线的任务详情,需结合REST API实现(见下文API部分)。
2. 使用Azure DevOps REST API
获取所有流水线
发送GET请求:
https://dev.azure.com/{组织名}/{项目名}/_apis/pipelines?api-version=7.1-preview.1
筛选内联PowerShell任务
- YAML流水线:针对每个流水线ID,调用接口获取YAML内容:
https://dev.azure.com/{组织名}/{项目名}/_apis/pipelines/{流水线ID}/yaml?api-version=7.1-preview.1
解析返回的YAML文本,查找powershell任务块中包含script:字段的条目。
- 经典流水线:调用构建定义接口获取任务配置:
https://dev.azure.com/{组织名}/{项目名}/_apis/build/definitions/{流水线ID}?api-version=7.1-preview.7
在返回结果的process.phases[].steps数组中,筛选task.type等于PowerShell且inputs.script字段存在(即内联脚本)的任务。
二、筛选发布定义中的内联PowerShell任务
1. 使用Azure DevOps CLI(结合az rest)
CLI无直接操作发布任务的命令,需通过az rest调用REST API:
获取所有发布定义ID
az rest --method get --uri "https://vsrm.dev.azure.com/你的组织名/你的项目名/_apis/release/definitions?api-version=7.1-preview.4" --query "[].id" -o tsv
遍历发布定义并筛选内联PowerShell任务
# 替换为目标发布定义ID RELEASE_DEF_ID=456 az rest --method get --uri "https://vsrm.dev.azure.com/你的组织名/你的项目名/_apis/release/definitions/$RELEASE_DEF_ID?api-version=7.1-preview.4" --query "environments[].deployPhases[].workflowTasks[] | [?taskType=='PowerShell' && inputs.script]"
该命令会直接输出包含内联脚本的PowerShell任务详情。
2. 使用Azure DevOps REST API
获取所有发布定义
发送GET请求:
https://vsrm.dev.azure.com/{组织名}/{项目名}/_apis/release/definitions?api-version=7.1-preview.4
筛选内联PowerShell任务
针对每个发布定义ID,调用接口获取配置:
https://vsrm.dev.azure.com/{组织名}/{项目名}/_apis/release/definitions/{发布定义ID}?api-version=7.1-preview.4
在返回结果的environments[].deployPhases[].workflowTasks数组中,筛选taskType等于PowerShell且inputs.script不为空的任务。
关键筛选逻辑
无论是流水线还是发布定义,内联PowerShell任务的核心特征是:
- YAML流水线:使用
script:字段直接定义脚本内容,而非filePath:引用外部文件 - 经典流水线/发布定义:任务的
inputs.script字段包含具体脚本代码
找到这些任务后,即可检查是否使用了已终止支持的Azure RM模块,进而替换为Az模块完成适配。
内容的提问来源于stack exchange,提问作者NK94
相关产品推荐
相关产品推荐

