Azure Devops API 使用 powershell 脚本获取所有项目、团队和成员

标签 azure powershell api azure-devops azure-devops-rest-api

我正在创建一个连接到 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://learn.microsoft.com/en-us/rest/api/azure/devops/core/projects/list?view=azure-devops-rest-6.0

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

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

最佳答案

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

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

关于Azure Devops API 使用 powershell 脚本获取所有项目、团队和成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69531575/

相关文章:

c# - 如何使用自定义条件从 Azure 删除日志?

c# - 调用其他命令的 PSCmdlet 由于处理时间长而卡住?

powershell - Windows Server 2012R2 Core - 无法运行 powershell DSC

ruby-on-rails - 如何在将使用 Yelp 等 API 的 Rails 应用程序中实现搜索栏?

api - Hyperwallet API,删除用户/转账方式

azure - 无法在 Azure Function 中创建编排函数

c# - 从 Azure 中托管的 Asp.net Core MVC Web 应用程序获取 "Response status code does not indicate success: 502 (Bad Gateway)"

api - 使用 Node JS 代理 http 并修改响应

c# - 使用 Microsoft.Azure.WebJobs.Extensions.ServiceBus 5.5.1 以编程方式设置连接字符串

powershell - Windows Azure 中的 'the current update to this deployment has been preempted' 错误意味着什么?