首页 > 解决方案 > Azure Devops API 使用 powershell 脚本获取所有项目、团队和成员

问题描述

我正在创建一个连接到 Azure Devops API 服务的 powershell 脚本,以获取所有项目、团队和团队成员。但是,我在团队分页方面遇到了一些问题,因为 API 只返回 1000 个结果。我正在使用查询的顶部和跳过参数来解决这个问题,但这不适用于我的脚本,这就是我所拥有的:

$Members = @()

$Organization = 'org'
$PAT = 'pat'

$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($PAT)")) }
$UriOrganization = "https://dev.azure.com/$($Organization)/"

$top_param=1000
$skip_param=0


$uriProject = $UriOrganization + "_apis/projects"
$ProjectsResult = Invoke-RestMethod -Uri $uriProject -Method get -Headers $AzureDevOpsAuthenicationHeader

Foreach ($project in $ProjectsResult.value)
{
    do
    {
        $uriTeams = $UriOrganization + "_apis/projects/$($project.id)/teams?$top=$($top_param)&$skip=$($skip_param)"
        $TeamsResult = Invoke-RestMethod -Uri $uriTeams -Method get -Headers $AzureDevOpsAuthenicationHeader
        Foreach ($team in $TeamsResult.value)
        {
            $uriTeamMembers = $UriOrganization + "_apis/projects/$($project.id)/teams/$($team.id)/members?$top=$($top_param)&$skip=$($skip_param)"
            $TeamMembersResult = Invoke-RestMethod -Uri $uriTeamMembers -Method get -Headers $AzureDevOpsAuthenicationHeader
            Foreach ($teamMember in $TeamMembersResult.value)
            {
                $Members += New-Object -TypeName PSObject -Property @{
                    ProjectID=$project.id
                    ProjectName=$project.name
                    TeamID=$team.id
                    TeamName=$team.name
                    TeamDescription=$team.description
                    MemberID=$teamMember.identity.id
                    MemberName=$teamMember.identity.displayName
                    MemberEmail=$teamMember.identity.uniqueName
                }
            }
        }
        $Members | ConvertTo-Csv | Out-File -FilePath "filepath\file.csv" -Append

        $top_param=$top_param+1000
        $skip_param=$skip_param+1000
    }
    while (1000 -lt $TeamsResult.count)
    
}

问题是我的脚本一遍又一遍地返回相同的结果,分页不起作用。我正在使用以下文档:

项目 API:https ://docs.microsoft.com/en-us/rest/api/azure/devops/core/projects/list?view=azure-devops-rest-6.0

团队 API:https ://docs.microsoft.com/en-us/rest/api/azure/devops/core/teams/get-all-teams?view=azure-devops-rest-6.0

成员 API:https ://docs.microsoft.com/en-us/rest/api/azure/devops/core/teams/get-team-members-with-extended-properties?view=azure-devops-rest-6.0

标签: azurepowershellapiazure-devopsazure-devops-rest-api

解决方案


检查这个 PowerShell 模块https://github.com/MethodsAndPractices/vsteam

Set-VSTeamAccount -Account <account> -PersonalAccessToken <PAT>
        Get-VSTeamProject | % {
            Set-VSTeamDefaultProject -Project $_
            $_.name
            Get-VSTeam | % {
                Get-VSTeamMember -teamId $_.id
            }
        }

推荐阅读