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

如何程序化连接Azure DevOps实例并导出组织项目团队仓库列表为CSV

程序化获取Azure DevOps实例中所有代码仓库并导出CSV

前提准备

  • 拥有目标Azure DevOps实例的访问权限,生成个人访问令牌(PAT),权限至少包含Code (Read)
  • 确认目标实例的完整URL(例如https://dev.azure.com/你的实例标识)

方法一:REST API + PowerShell脚本

通过直接调用Azure DevOps REST API,结合PowerShell处理数据并导出CSV,适合需要自定义逻辑的场景。

完整脚本示例

# 配置核心参数
$instanceUrl = "https://dev.azure.com/你的实例标识"
$pat = "你的PAT令牌"
$outputCsvPath = "./azdo-repositories.csv"

# 转换PAT为API要求的Base64编码格式
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))

# 初始化结果存储数组
$repoData = @()

# 获取实例下所有组织
$orgsResponse = Invoke-RestMethod -Uri "$instanceUrl/_apis/accounts?api-version=7.1-preview.1" `
                                  -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} `
                                  -Method Get

foreach ($org in $orgsResponse.value) {
    $orgName = $org.accountName
    Write-Host "正在处理组织:$orgName"

    # 获取当前组织下所有项目
    $projectsResponse = Invoke-RestMethod -Uri "$instanceUrl/$orgName/_apis/projects?api-version=7.1-preview.4" `
                                          -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} `
                                          -Method Get

    foreach ($project in $projectsResponse.value) {
        $projectName = $project.name
        Write-Host "  正在处理项目:$projectName"

        # 获取当前项目下所有代码仓库
        $reposResponse = Invoke-RestMethod -Uri "$instanceUrl/$orgName/$projectName/_apis/git/repositories?api-version=6.1-preview.1" `
                                           -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} `
                                           -Method Get

        # 获取当前项目下所有团队(用于关联仓库)
        $teamsResponse = Invoke-RestMethod -Uri "$instanceUrl/$orgName/$projectName/_apis/teams?api-version=7.1-preview.3" `
                                           -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} `
                                           -Method Get

        # 关联仓库与团队,存入结果数组
        foreach ($repo in $reposResponse.value) {
            foreach ($team in $teamsResponse.value) {
                $repoData += [PSCustomObject]@{
                    organization = $orgName
                    project      = $projectName
                    team         = $team.name
                    repo         = $repo.name
                }
            }
        }
    }
}

# 导出为制表符分隔的CSV文件
$repoData | Export-Csv -Path $outputCsvPath -NoTypeInformation -Delimiter "`t"
Write-Host "导出完成,文件路径:$outputCsvPath"

关键调整说明

  • 若仅需关联项目的默认团队,可将团队遍历逻辑改为:$teamsResponse.value | Where-Object { $_.isDefault -eq $true }
  • 若数据量较大(超过100条),需添加分页处理逻辑:检查响应中的nextLink字段,循环调用API直到获取全部数据
  • 如需逗号分隔的CSV,去掉-Delimiter "t"`参数即可

方法二:Azure DevOps CLI + PowerShell脚本

若已安装Azure DevOps CLI,可借助CLI简化API调用流程,代码更简洁。

完整脚本示例

# 配置核心参数
$instanceUrl = "https://dev.azure.com/你的实例标识"
$outputCsvPath = "./azdo-repos-cli.csv"
$repoData = @()

# 登录Azure DevOps CLI(首次运行需执行,后续可省略)
az devops login --organization $instanceUrl --token "你的PAT令牌"

# 获取实例下所有组织
$orgs = az devops admin organization list --instance $instanceUrl --output json | ConvertFrom-Json

foreach ($org in $orgs.value) {
    $orgName = $org.name
    Write-Host "处理组织:$orgName"

    # 获取当前组织下所有项目
    $projects = az devops project list --organization "$instanceUrl/$orgName" --output json | ConvertFrom-Json

    foreach ($project in $projects.value) {
        $projectName = $project.name
        Write-Host "  处理项目:$projectName"

        # 获取当前项目下所有仓库
        $repos = az repos list --organization "$instanceUrl/$orgName" --project $projectName --output json | ConvertFrom-Json

        # 获取当前项目下所有团队
        $teams = az devops team list --organization "$instanceUrl/$orgName" --project $projectName --output json | ConvertFrom-Json

        # 关联并存储数据
        foreach ($repo in $repos) {
            foreach ($team in $teams) {
                $repoData += [PSCustomObject]@{
                    organization = $orgName
                    project      = $projectName
                    team         = $team.name
                    repo         = $repo.name
                }
            }
        }
    }
}

# 导出CSV
$repoData | Export-Csv -Path $outputCsvPath -NoTypeInformation -Delimiter "`t"
Write-Host "导出完成"

关于团队关联的补充说明

Azure DevOps中仓库本身不直接绑定团队,权限通过项目级或仓库级的权限组控制。上述脚本默认将项目下所有团队与仓库关联,若需精确获取有权限访问仓库的团队,需额外调用权限查询API(_apis/securitynamespaces)筛选,逻辑会更复杂,可根据实际需求扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:30