2012-09-28 16 views
5

Estoy tratando de escribir un pequeño script para configurar todas las imágenes de los usuarios en su imagen AD, hice algunos saltos en ILSpy y descubrí qué configurar con el servidor TFS API, sin embargo, el código debe ser un poco diferente porque en su lugar estoy usando la API del cliente.API para actualizar la imagen de los usuarios - Identity Extended Properties no guarda

El código que se muestra a continuación puede iterar con éxito a través de todos los usuarios en tfs, buscarlos en AD, tomar la miniatura, establecer la propiedad en la identidad de TFS. Pero no puedo, por el resto de mi vida, obtener la propiedad extendida para volver a guardar en TFS.

El código no es una excepción, pero la propiedad no está configurada en el valor que configuré la próxima vez que ejecuto la aplicación.

¿Alguien sabe la manera de guardar las propiedades extendidas a través de la API del cliente?

Microsoft.TeamFoundation.Client.TeamFoundationServer teamFoundationServer = new Microsoft.TeamFoundation.Client.TeamFoundationServer("{URL TO TFS}"); 

FilteredIdentityService service = teamFoundationServer.GetService<FilteredIdentityService>(); ; 
IIdentityManagementService2 service2 = teamFoundationServer.GetService<IIdentityManagementService2>(); 

foreach (var identity in service.SearchForUsers("")) 
{ 
    var user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), identity.UniqueName); 
    if (user == null) continue; 
    var de = new System.DirectoryServices.DirectoryEntry("LDAP://" + user.DistinguishedName); 
    var thumbNail = de.Properties["thumbnailPhoto"].Value as byte[]; 

    identity.SetProperty("Microsoft.TeamFoundation.Identity.CandidateImage.Data", thumbNail); 
    identity.SetProperty("Microsoft.TeamFoundation.Identity.CandidateImage.UploadDate", DateTime.UtcNow); 

    service2.UpdateExtendedProperties(identity); 
} 

Respuesta

7

Entendido, es necesario establecer algunas propiedades adicionales.

Microsoft.TeamFoundation.Client.TeamFoundationServer teamFoundationServer = new Microsoft.TeamFoundation.Client.TeamFoundationServer("http://urltotfs"); 

FilteredIdentityService service = teamFoundationServer.GetService<FilteredIdentityService>(); ; 
IIdentityManagementService2 service2 = teamFoundationServer.GetService<IIdentityManagementService2>(); 

foreach (var identity in service.SearchForUsers("")) 
{ 
    var user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), identity.UniqueName); 
    if (user == null) continue; 
    var de = new System.DirectoryServices.DirectoryEntry("LDAP://" + user.DistinguishedName); 
    var thumbNail = de.Properties["thumbnailPhoto"].Value as byte[]; 

    identity.SetProperty("Microsoft.TeamFoundation.Identity.Image.Data", thumbNail); 
    identity.SetProperty("Microsoft.TeamFoundation.Identity.Image.Type", "image/png"); 
    identity.SetProperty("Microsoft.TeamFoundation.Identity.Image.Id", Guid.NewGuid().ToByteArray()); 
    identity.SetProperty("Microsoft.TeamFoundation.Identity.CandidateImage.Data", null); 
    identity.SetProperty("Microsoft.TeamFoundation.Identity.CandidateImage.UploadDate", null); 

    service2.UpdateExtendedProperties(identity); 
} 
Cuestiones relacionadas