用于更新用户映像的API - 不保存标识扩展属性

Bet*_*tty 6 tfs-sdk tfs2012

我正在尝试编写一个小脚本来将所有用户图像设置为他们的AD图像,我在ILSpy中做了一些跳转并找到了使用TFS服务器API设置的内容,但是代码需要有点不同,因为我' m而是使用客户端API.

我下面的代码可以成功遍历tfs中的所有用户,在AD中查找它们,获取缩略图,在TFS标识上设置属性.但我不能为我的生活图获得扩展属性以保存回TFS.

代码没有异常,但是当我下次运行应用程序时,属性未设置为我设置的值.

有谁知道通过客户端api保存扩展属性的方法?

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);
}
Run Code Online (Sandbox Code Playgroud)

Bet*_*tty 7

想出来,需要设置一些额外的属性.

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); 
}
Run Code Online (Sandbox Code Playgroud)