如何使用PowerShell将Azure DevOps流水线移至/archived目录
程序化移动Azure DevOps流水线至/archived目录的PowerShell实现
要实现和手动操作等效的流水线移动,直接调用Azure DevOps REST API即可,以下是具体的PowerShell实现方案,可直接集成到你现有的仓库标记脚本中:
核心实现步骤
1. 配置基础参数
先定义Azure DevOps组织、项目、目标流水线ID以及有权限的个人访问令牌(PAT):
# 替换为你的实际信息 $orgUrl = "https://dev.azure.com/your-org-name" $projectName = "your-project-name" $pipelineId = 123 # 目标流水线的ID,可从流水线页面URL或API获取 $pat = "your-personal-access-token" # 需要拥有流水线编辑权限
2. 构造认证头
将PAT转换为API要求的Base64格式认证信息:
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))
3. 更新流水线目录
通过PUT请求修改流水线的folder属性为/archived(若该目录不存在,ADO会自动创建):
# 获取流水线当前信息(可选,用于验证) $pipelineUrl = "$orgUrl/$projectName/_apis/pipelines/$pipelineId?api-version=7.1-preview.1" $currentPipeline = Invoke-RestMethod -Uri $pipelineUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get # 构造更新请求体 $updateBody = @{ folder = "/archived" } | ConvertTo-Json # 发送更新请求 $updateUrl = "$orgUrl/$projectName/_apis/pipelines/$pipelineId?api-version=7.1-preview.1" $updatedPipeline = Invoke-RestMethod -Uri $updateUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put -Body $updateBody -ContentType "application/json" # 输出结果验证 Write-Host "流水线已成功移动至目录: $($updatedPipeline.folder)"
批量集成到现有脚本
如果要批量处理关联到已标记isdisabled仓库的流水线,可先通过API获取项目下所有流水线,筛选出关联目标仓库的条目,再批量执行移动操作:
# 获取项目下所有流水线 $allPipelinesUrl = "$orgUrl/$projectName/_apis/pipelines?api-version=7.1-preview.1" $allPipelines = Invoke-RestMethod -Uri $allPipelinesUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get # 筛选出关联到已禁用仓库的流水线(替换为你的仓库识别逻辑) $targetPipelines = $allPipelines.value | Where-Object { $_.repository.id -eq "your-disabled-repo-id" -or $_.repository.name -eq "your-disabled-repo-name" } # 批量移动 foreach ($pipeline in $targetPipelines) { $updateBody = @{ folder = "/archived" } | ConvertTo-Json $updateUrl = "$orgUrl/$projectName/_apis/pipelines/$($pipeline.id)?api-version=7.1-preview.1" Invoke-RestMethod -Uri $updateUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put -Body $updateBody -ContentType "application/json" Write-Host "已移动流水线: $($pipeline.name) (ID: $($pipeline.id))" }
注意事项
- PAT权限:必须授予「流水线」权限组下的「编辑」权限
- API版本:示例使用
7.1-preview.1,可根据ADO版本调整为稳定版(如7.0) - 目录自动创建:若
/archived目录不存在,ADO会在移动时自动生成
内容的提问来源于stack exchange,提问作者Nick Sharnik
相关产品推荐
相关产品推荐

