如何程序化连接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
相关产品推荐
相关产品推荐

