如何列出不再属于任何安全组的旧TFS用户?

时间:2011-12-04 12:04:13

标签: security version-control tfs tfs2010 tfs-sdk

有很多示例展示了如何获取当前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 个答案:

答案 0 :(得分:1)

我无法提供确切的答案,但希望这会有所帮助......

您可以通过工作区列出所有挂起的更改(即tf.exe workspaces命令和等效的apis)。使用每个工作区的所有者使用未提交的更改,您应该能够与您已经拥有的活动用户列表进行交叉引用。

答案 1 :(得分:0)

以下代码段应显示您在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);
                }
            }
        }
    }
}

请注意,这是一种蛮力,并且,如果有很多变更集,则需要相当长的时间才能执行。