6

すべてのユーザーのイメージを AD イメージに設定するための小さなスクリプトを作成しようとしています。 m 代わりにクライアント API を使用します。

以下のコードは、tfs 内のすべてのユーザーを正常に反復処理し、AD でそれらを検索し、サムネイルを取得し、TFS ID のプロパティを設定することができます。しかし、私の人生では、拡張プロパティを取得して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);
}
4

1 に答える 1

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); 
}
于 2012-09-28T20:19:55.860 に答える