API TFS – ¿Cómo obtener un administrador de equipo?

Estoy tratando de recuperar mediante progtwigción los Usuarios de un Administrador de Equipo .

Por ejemplo, en una configuración como en la imagen, ¿cómo puedo obtener ‘Billy’ como administrador del equipo ‘QC Manager’?

Ya tengo el código que reúne a todos los usuarios en un Equipo a través de los Grupos de Aplicaciones de Lista de IIdentityManagementService, obteniendo el grupo usando FirstOrDefault … y luego obteniendo sus usuarios a través de ReadIdentities.

Configuración del administrador del equipo TFS

Hice algunas maniobras en los ensamblajes de Team Web Access, y parece que esto solo está disponible en el lado del servidor en este momento (no hay opción de Resto o Modelo de Objeto de Cliente disponible). El código se ve así:

TeamFoundationIdentity identity; string token = service.GetSecurableToken(requestContext, teamIdentity.Descriptor, out identity); AccessControlList list = requestContext.GetService().QueryAccessControlLists(requestContext, FrameworkSecurity.IdentitiesNamespaceId, token, null, false, false).FirstOrDefault(); List list2 = new List(); if (list != null) { foreach (AccessControlEntry entry in list.AccessControlEntries) { if ((entry.Allow & 8) == 8) { list2.Add(entry.Descriptor); } } } return service.ReadIdentities(requestContext, list2.ToArray()); 

Donde se ve GetSecurableToken como:

 internal static string CreateSecurityToken(TeamFoundationIdentity group) { return (group.GetAttribute(IdentityAttributeTags.LocalScopeId, string.Empty) + FrameworkSecurity.IdentitySecurityPathSeparator + group.TeamFoundationId.ToString()); } 

Desde aquí debería poder juntar el código para leer y escribir estas listas. Para ir hurgando alrededor de usted, busque Microsoft.TeamFoundation.Server.Core.dll , Class Microsoft.TeamFoundation.Server.Core.TeamFoundationTeamService para ser específico.

Si pudieras reescribirlo en algo útil, te lo agradecería y lo pegaría en las herramientas de TfsTeam, en este momento no tengo mucho tiempo en mis manos para recoger esto.

Encontré este post TFS11 API: Administrando administradores de equipos ; Duplico código para una referencia fácil, vea la publicación original para obtener información completa.

 static void Main(string[] args) { // Connect to the TFS server and get the team project URI. var collection = GetServer("server_uri"); var projectUri = GetProjectUri(collection, "project_name"); // Retrieve the default team. TfsTeamService teamService = collection.GetService(); TeamFoundationTeam defaultTeam = teamService.GetDefaultTeam(projectUri, null); // Get security namespace for the project collection. ISecurityService securityService = collection.GetService(); SecurityNamespace securityNamespace = securityService.GetSecurityNamespace(FrameworkSecurity.IdentitiesNamespaceId); // Use reflection to retrieve a security token for the team. MethodInfo mi = typeof(IdentityHelper).GetMethod("CreateSecurityToken", BindingFlags.Static | BindingFlags.NonPublic); string token = mi.Invoke(null, new object[] { defaultTeam.Identity }) as string; // Retrieve an ACL object for all the team members. var allMembers = defaultTeam.GetMembers(collection, MembershipQuery.Expanded).Where(m => !m.IsContainer); AccessControlList acl = securityNamespace.QueryAccessControlList(token, allMembers.Select(m => m.Descriptor), true); // Retrieve the team administrator SIDs by querying the ACL entries. var entries = acl.AccessControlEntries; var admins = entries.Where(e => (e.Allow & 15) == 15).Select(e => e.Descriptor.Identifier); // Finally, retrieve the actual TeamFoundationIdentity objects from the SIDs. var adminIdentities = allMembers.Where(m => admins.Contains(m.Descriptor.Identifier)); }