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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:21:48