¿Cómo incluyo a los usuarios antiguos de TFS que ya no pertenecen a ningún grupo de security?

Hay muchos ejemplos que muestran cómo get una list de usuarios actuales de TFS, pero ¿cómo obtengo una list de usuarios antiguos que han confirmado cambios en el pasado pero que ya no pertenecen a ningún grupo de security?

Para el logging, este es el código que estoy usando para encontrar todos los usuarios actuales:

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)); 

No puedo ofrecer una respuesta exacta, pero espero que esto ayude …

Puede enumerar todos los cambios pendientes a través de los espacios de trabajo (es decir, el command tf.exe workspaces y apis equivalentes). Al usar el propietario de cada área de trabajo con cambios no confirmados, podrá hacer una reference cruzada con la list de usuarios activos que ya tiene.

El siguiente fragment debe revelar a todas y cada una de las personas que alguna vez haya realizado cambios en su repository de 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); } } } } } 

Tenga en count que esta es una fuerza bruta y, con una gran cantidad de sets de cambios, tomaría un time considerable para ejecutar.