Как программно добавлять пользователей в TFS - PullRequest
3 голосов
/ 05 ноября 2011

Я хочу добавить пользователей программно в командный проект. Решение, которое я обнаружил, было следующим:

IGroupSecurityService gss = (IGroupSecurityService)objTFS.GetService(typeof(IGroupSecurityService));
Identity identity = gss.ReadIdentity(SearchFactor.AccountName, "Group name", QueryMembership.None);
gss.AddMemberToApplicationGroup(groupProject.Sid, member.Sid);

Но это работает только для групп / пользователей, известных TFS.

Я хочу добавить учетную запись Windows в TFS

Например:

Имя учетной записи Windows: TestTFS

Пароль: 123456

Затем программно добавьте TestTFS в TFS.

Я знаю, что инструмент под названием TeamFoundation Administration Tool может это сделать, но я не хочу его использовать.

Ответы [ 3 ]

6 голосов
/ 01 февраля 2013

В TFS2012, IGroupSecurityService был помечен как устаревший и заменен на IIdentityManagementService.

Вы можете использовать IIdentityManagementService.ReadIdentity() вместе с IIdentityManagementService.AddMemberToApplicationGroup() для добавления пользователей Windows в группы TFS, даже если эти пользователи Windows еще не известны TFS.

Это достигается указанием опции ReadIdentityOptions.IncludeReadFromSource.

Ниже приведен пример добавления пользователя Windows VSALM\Barry в Fabrikam Fiber Web Team (группа TFS), в FabrikamFiber Team Project, в http://vsalm:8080/tfs/FabrikamFiberCollection сервер / коллекцию.

Вам нужно будет добавить ссылки на: Microsoft.TeamFoundation.Client и Microsoft.TeamFoundation.Common

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

namespace ConsoleApplication1
{
   class Program
        {
        static void Main(string[] args)
        {
            var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://vsalm:8080/tfs/FabrikamFiberCollection"));

            var ims = tpc.GetService<IIdentityManagementService>();

            var tfsGroupIdentity = ims.ReadIdentity(IdentitySearchFactor.AccountName,
                                                    "[FabrikamFiber]\\Fabrikam Fiber Web Team",
                                                    MembershipQuery.None,
                                                    ReadIdentityOptions.IncludeReadFromSource);            

            var userIdentity = ims.ReadIdentity(IdentitySearchFactor.AccountName,
                                                    "VSALM\\Barry",
                                                    MembershipQuery.None,
                                                    ReadIdentityOptions.IncludeReadFromSource);

            ims.AddMemberToApplicationGroup(tfsGroupIdentity.Descriptor, userIdentity.Descriptor);
        }
    }
}
2 голосов
/ 25 октября 2012

У меня была та же проблема, наконец-то сработал следующий код

            NTAccount f = new NTAccount(userName);
            SecurityIdentifier s = (SecurityIdentifier)f.Translate(typeof(SecurityIdentifier));
            string userSid = s.ToString();

Пространство имен: using System.Security.Principal;

1 голос
/ 05 ноября 2011

Чтобы выполнить эту операцию через TFS API, вам необходим доступ к 2 уровням информации.

  1. sid пользователя, которого вы хотите добавить,

  2. sid группы, в которую вы хотите добавить пользователя => Код, который вы указали в своем сообщении, даст вам идентификатор группы, в которую вы хотите добавить пользователя.

Я нашел 2 ссылки с примером кода, который, как мне кажется, может быть вам полезен,

...