PowerShell调用Azure DevOps REST API批量创建项目报错求助
脚本失败原因
- Azure DevOps 项目创建REST API单请求仅支持创建1个项目,无单次传入多名称批量创建的能力,原脚本直接给
name字段传名称数组的逻辑不符合接口规则 - 脚本存在基础语法错误:
$ProjectUrl字符串未闭合结尾引号;name字段错误使用哈希表结构@{}直接存放数组值,语法不合法 - 序列化请求体时
ConvertTo-Json默认序列化深度仅为2,嵌套的capabilities结构会被序列化异常,导致请求参数缺失 - 项目创建是长耗时异步操作,无状态校验的连续请求容易触发平台限流,也无法确认每个项目的创建结果
正确实现脚本
# 替换为你的实际配置参数 $connectionToken = "你的Azure DevOps PAT令牌,需具备项目创建权限" $orgName = "你的Azure DevOps组织名" $processTemplateId = "要使用的进程模板ID" $projectNames = @("TestProjectCreation1","test1","test2") # 所有需要批量创建的项目名 $projectDescription = "Frabrikam travel app for Windows Phone" # 构造认证信息 $base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)")) $authHeader = @{Authorization=("Basic {0}" -f $base64AuthInfo)} $createProjectApi = "https://dev.azure.com/$orgName/_apis/projects?api-version=7.1-preview.4" foreach ($singleProj in $projectNames) { Write-Host "开始处理项目创建: $singleProj" # 构造单个项目的请求体 $requestBody = @{ name = $singleProj description = $projectDescription capabilities = @{ versioncontrol = @{ sourceControlType = 'Git' } processTemplate = @{ templateTypeId = $processTemplateId } } } | ConvertTo-Json -Depth 5 # 指定序列化深度保证嵌套结构正常转换 try { # 提交创建请求 $createResponse = Invoke-RestMethod -Uri $createProjectApi -Method Post -ContentType "application/json" -Headers $authHeader -Body $requestBody $operationCheckUrl = $createResponse.url # 轮询创建状态直到结束 do { Start-Sleep -Seconds 3 $statusRes = Invoke-RestMethod -Uri $operationCheckUrl -Method Get -Headers $authHeader Write-Host "项目 $singleProj 当前状态: $($statusRes.status)" } while ($statusRes.status -in "queued", "inProgress") if ($statusRes.status -eq "succeeded") { Write-Host "项目 $singleProj 创建成功" -ForegroundColor Green } else { Write-Host "项目 $singleProj 创建失败,错误信息: $($statusRes.detailedMessage)" -ForegroundColor Red } } catch { Write-Host "提交项目 $singleProj 创建请求失败: $_" -ForegroundColor Red } # 请求间隔避免触发限流 Start-Sleep -Seconds 2 }
注意事项
- 使用的PAT令牌需要开通「项目和团队」分类下的读取、写入和管理权限,否则会返回403权限错误
- 进程模板ID可以通过调用组织下的进程列表接口获取,对应你组织内启用的敏捷、Scrum、CMMI等流程
- 如果组织配置了项目创建审批规则,脚本会停在
inProgress状态,直到审批流程结束后自动继续判断结果
内容的提问来源于stack exchange,提问作者priya
相关产品推荐
相关产品推荐

