Как мне перечислить старых пользователей TFS, которые больше не принадлежат ни к одной группе безопасности? - PullRequest
2 голосов
/ 04 декабря 2011

Существует множество примеров, показывающих, как получить список текущих пользователей TFS, но как мне получить список старых пользователей, которые в прошлом фиксировали изменения, но больше не принадлежали к каким-либо группам безопасности?

Для записи, это код, который я использую, чтобы найти всех текущих пользователей:

var gss = tfs.GetService<IGroupSecurityService>();
var members = gss.ReadIdentity(SearchFactor.EveryoneApplicationGroup,
                               null,
                               QueryMembership.Expanded).Members;
return gss.ReadIdentities(SearchFactor.Sid, members, QueryMembership.None)
    .Where(identity => identity != null &&
                       identity.Type == IdentityType.WindowsUser)
    .Select(identity => string.Format(@"{0}\{1}",
                                      identity.Domain,
                                      identity.AccountName));

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Я не могу предложить точный ответ, но, надеюсь, это поможет ...

Вы можете перечислить все ожидающие изменения в рабочих пространствах (т. Е. Команда tf.exe workspaces и эквивалентные apis). Используя владельца каждого рабочего пространства с незафиксированными изменениями, вы сможете перекрестно ссылаться на список активных пользователей, которые у вас уже есть.

0 голосов
/ 05 декабря 2011

Следующий фрагмент должен раскрыть каждого человека, который когда-либо совершал изменения в вашем репозитории TeamCollection:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace PeopleWhoHaveCommitedChangesets
{
    class Program
    {
        static void Main()
        {
            TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSServer:8080"));
            VersionControlServer vcs = (VersionControlServer) tpc.GetService(typeof (VersionControlServer));
            IEnumerable results = vcs.QueryHistory(@"$/",
                                                    VersionSpec.Latest, 0, RecursionType.Full, null, null, null, int.MaxValue, true, true);
            List<Changeset> changesets = results.Cast<Changeset>().ToList();

            List<string> Users = new List<string>();
            foreach (var changeset in changesets)
            {
                if(!Users.Contains(changeset.Owner))
                {
                    Users.Add(changeset.Owner);
                }
            }
        }
    }
}

Остерегайтесь, что это грубая сила, и с большим количеством наборов изменений для ее выполнения потребуется значительное время.

...