API REST для добавления участников в проекты и команду не задокументировано. Как упомянул Хью, мы можем отслеживать REST API с помощью инструментов разработки (нажмите F12 в браузере), однако, как мы видим, мы можем использовать GUID пользователя и команды / группы только в теле запроса json.
Post https://wsicads2019/DefaultCollection/{project}/_api/_identity/AddIdentities?api-version=5.0
Request Body:
{
"newUsersJson": "[]",
"existingUsersJson": "[\"55b98726-c6f5-48d2-976b-xxxxxx\"]",
"groupsToJoinJson": "[\"7283653f-54b2-4ebf-86c3-xxxxxxx\"]",
"aadGroupsJson": "[]"
}
Для конкретной команды / групп мы можем использовать REST APIs Projects и команды, чтобы получить их GUID. Для пользователя фактически используется TeamFoundationId
, уникальный TeamFoundationId
генерируется автоматически при добавлении пользователя на сервер Azure DevOps. Мы не можем сгенерировать идентификатор с помощью внешних инструментов.
Итак, чтобы использовать этот REST API, нам нужно получить TeamFoundationId
конкретного пользователя, которого вы хотите добавить в проекты / команды.
В настоящее время нет REST API для перечисления TeamFoundationId
пользователей Azure DevOps Server 2019, однако мы можем получить его с помощью Client API:
Ниже приведен пример для справки, чтобы получить TeamFoundationId
изопределенный пользователь: (он также будет экспортировать список пользователей с их TeamFoundationId
в userlist.txt
)
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("https://wsicads2019"));
IIdentityManagementService ims = tcs.GetService<IIdentityManagementService>();
TeamFoundationIdentity tfi = ims.ReadIdentity(IdentitySearchFactor.AccountName, "[DefaultCollection]\\Project Collection 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" && id.UniqueName == "Domain\\User")
{ Console.WriteLine("[{0},{1}]", id.UniqueName, id.TeamFoundationId); }
file.WriteLine("[{0},{1}]", id.UniqueName, id.TeamFoundationId);
}
var count = ids.Count(x => ids.Contains(x));
Console.WriteLine(count);
Console.ReadLine();
}
}
}