首页 > 解决方案 > 如何使用 C# 更新 TFS 用户显示名称

问题描述

我可以使用以下 C# 代码从 TFS 检索用户列表。但是,我想更改并保留用户的显示名称。这是我的代码。

using System;
using System.Collections.Generic;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Framework.Common;

namespace ConsoleApplication3
{
  class Program
  {
    static void Main(string[] args)
    {

        TfsConfigurationServer tcs = new TfsConfigurationServer(new Uri("http://tfsserver:8080/tfs"));

        IIdentityManagementService ims = tcs.GetService<IIdentityManagementService>();

        TeamFoundationIdentity tfi = ims.ReadIdentity(IdentitySearchFactor.AccountName, "[TEAM FOUNDATION]\\Team Foundation Valid Users", MembershipQuery.Expanded, ReadIdentityOptions.None);

        TeamFoundationIdentity[] ids = ims.ReadIdentities(tfi.Members, MembershipQuery.None, ReadIdentityOptions.None);

        foreach (TeamFoundationIdentity id in ids)
        {
            if (id.Descriptor.IdentityType == "System.Security.Principal.WindowsIdentity")
            {
                var displayName = id.DisplayName;

                // Now I would like to change this displayName and persist the change ??? 
            }
        }

        Console.ReadLine();
    }
  }
}

谢谢鲁修

标签: c#tfs

解决方案


ReadIdentities正如您在IIdentityManagementService 接口中首次使用所指出的那样,您可以查看下面的代码片段,它将 identity.DisplayName 从 Patrick Lu 转换为 Test User 。

        var sec = _tfs.GetService<IGroupSecurityService>();
        var vcs = _tfs.GetService<VersionControlServer>();

        Identity[] appGroups = sec.ListApplicationGroups(vcs.GetTeamProject(_selectedTeamProject).ArtifactUri.AbsoluteUri);

        foreach (Identity group in appGroups)
        {
            Identity[] groupMembers = sec.ReadIdentities(SearchFactor.Sid, new string[] { group.Sid }, QueryMembership.Expanded);

            foreach (Identity member in groupMembers)
            {
                if (member.Members != null)
                {
                    foreach (string memberSid in member.Members)
                    {
                        Identity memberInfo = sec.ReadIdentity(SearchFactor.Sid, memberSid, QueryMembership.Expanded);

                        if (memberInfo.DisplayName.ToUpper() == "Patrick Lu")
                        {
                            memberInfo.DisplayName = "Test User ";
                        }
                    }
                }
            }
        }

确保您有足够的权限来执行此操作。


推荐阅读