获取Ado或TFS项目的所有用户

问题描述 投票:0回答:1

我无法找到任何 ADO .net 客户端库/rest api 来查找与特定项目相关的所有用户,项目可以属于 ADO 服务器或 TFS (>2013) 和 ADO 服务。

我使用了 GraphHttpClient,但我猜它现在已被弃用并且不能与 TFS 一起使用。我也找不到它的文档。我还面临着如何使用 Microsoft Graph 客户端来执行此操作的麻烦。

c# .net azure-devops tfs ado.net
1个回答
0
投票

要获取Azure DevOps Service的用户,我们可以使用API:Users - List和变量

scopeDescriptor
来获取一个项目中的用户列表。

GET https://vssps.dev.azure.com/{organization}/_apis/graph/users?scopeDescriptor={scopeDescriptor}&api-version=6.0-preview.1

请参考以下步骤:

Step1:使用Rest API:列出所有项目并获取项目ID。

GET https://dev.azure.com/{organization}/_apis/projects?api-version=6.0

Step2:通过 Descriptors - Get 获取一个项目 scopeDescriptor

GET https://vssps.dev.azure.com/{organization}/_apis/graph/descriptors/{ProjectID}?api-version=5.0-preview.1

例如:

我们可以记录响应中value字段的值(scp...)。该值为scopeDescriptor。

Step3:将相关值添加到Rest API中:

GET https://vssps.dev.azure.com/{organization}/_apis/graph/users?scopeDescriptor={scopeDescriptor}&api-version=6.0-preview.1

那么我们只能获取一个项目中的用户列表。

如果您需要在TFS或Azure DevOps Server中运行Rest API,您可以更改为使用相关的Rest API版本。

例如:您可以在文档的下拉列表中查看

更新:

要获取 TFS 或 Azure DevOps 项目中的用户,您可以使用上面提到的 client API 来检索用户列表。

您可以查看群组:

[projectname]\\Project Valid Users
以获取项目中的所有用户。

这是一个例子:

using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;
using System.Linq;
using System.IO;

namespace Getuserlist

{

    class Program

    {
        static void Main(string[] args)

        {

            TfsConfigurationServer tcs = new TfsConfigurationServer(new Uri("http://server:8080/tfs"));

            IIdentityManagementService ims = tcs.GetService<IIdentityManagementService>();

            TeamFoundationIdentity tfi = ims.ReadIdentity(IdentitySearchFactor.AccountName, "[projectname]\\Project Valid Users", MembershipQuery.Expanded, ReadIdentityOptions.None);

            TeamFoundationIdentity[] ids = ims.ReadIdentities(tfi.Members, MembershipQuery.None, ReadIdentityOptions.None);

            using (StreamWriter file = new StreamWriter("userlist.txt"))

                foreach (TeamFoundationIdentity id in ids)

                {
                    if (id.Descriptor.IdentityType == "System.Security.Principal.WindowsIdentity")

                    { Console.WriteLine(id.DisplayName); }
                    //{ Console.WriteLine(id.UniqueName); }

                    file.WriteLine("[{0}]", id.DisplayName);
                }

            var count = ids.Count(x => ids.Contains(x));
            Console.WriteLine(count);
            Console.ReadLine();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.