我无法找到任何 ADO .net 客户端库/rest api 来查找与特定项目相关的所有用户,项目可以属于 ADO 服务器或 TFS (>2013) 和 ADO 服务。
我使用了 GraphHttpClient,但我猜它现在已被弃用并且不能与 TFS 一起使用。我也找不到它的文档。我还面临着如何使用 Microsoft Graph 客户端来执行此操作的麻烦。
要获取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();
}
}
}