首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与TFS 2015交互(内部部署)

与TFS 2015交互(内部部署)
EN

Stack Overflow用户
提问于 2017-03-09 23:43:33
回答 1查看 146关注 0票数 1

我正在创建一个导出文件,其中包含特定TFS集合的所有TFS项目、用户及其关联的TFS组。(使用ITeamProjectCollectionService、IIdentityManagementService)

我注意到我也收到了被禁用的广告用户。如何将禁用的AD用户从该列表中筛选出来?我没有直接访问AD环境的权限。Microsoft.TeamFoundation.Server.Identity不包含此属性。

代码语言:javascript
复制
        Uri configurationServerUri = new Uri(environmentConfig.Uri);
        TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(configurationServerUri);
        var tpcService = configurationServer.GetService<ITeamProjectCollectionService>();
        foreach (TeamProjectCollection tpc in tpcService.GetCollections())
        {
            var tfsProjectCollection = new TfsTeamProjectCollection(new Uri(environmentConfig.Uri + "/" + tpc.Name), environmentCredential);

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

            var teamProjects = vcs.GetAllTeamProjects(false);
            foreach (var teamProject in teamProjects)
            {
                var appGroups = sec.ListApplicationGroups(teamProject.ArtifactUri.AbsoluteUri);

                foreach (var 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.Type != IdentityType.WindowsUser)
                                    continue;

                                result.Add(new TfsPermission { Collection = tfsProjectCollection.Name, TeamProject = teamProject.Name,
                                    User = memberInfo.AccountName, Domain = memberInfo.Domain, Group = group.DisplayName });
                            }
                        }
                    }
                }
            }
        }

致以最好的问候,Jens

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-10 14:54:01

您可以使用memberInfo.Domain == "DomainName"来判断此帐户是否为AD帐户。通常,如果标识是在TFS中添加的windows帐户,则其memberInfo.Domain属性等于服务器名称而不是域名。

代码语言:javascript
复制
foreach (string memberSid in member.Members)
{
      Identity memberInfo = sec.ReadIdentity(SearchFactor.Sid, memberSid, QueryMembership.Expanded);
      if (memberInfo.Type == IdentityType.WindowsUser && memberInfo.Domain == "DomainName")
      {
                                result.Add(new TfsPermission
                                {
                                    Collection = tfsProjectCollection.Name,
                                    TeamProject = teamProject.Name,
                                    User = memberInfo.AccountName,
                                    Domain = memberInfo.Domain,
                                    Group = group.DisplayName
                                });
       }
}

然后检查这些帐户是否在AD中被禁用,就像Starain所说的那样,使用TFS API无法做到这一点。但你可以使用下面的方法来帮助你检查上面得到的每个帐户,如果它在AD:find if user account is enabled or disabled in AD中被禁用了

代码语言:javascript
复制
const string accountName = "name"; // The accountName of AD user
var principalContext = new PrincipalContext(ContextType.Domain, "domainNameHere", "AdminUser", "AdminPass");
var userPrincipal = UserPrincipal.FindByIdentity(principalContext, accountName);

if (userPrincipal != null)
{
    var dirEntry = userPrincipal.GetUnderlyingObject() as DirectoryEntry;
    var status = IsAccountDisabled(dirEntry);

}

//Jugde if it is disabled in AD
public static bool IsAccountDisabled(DirectoryEntry user)
{
        const string uac = "userAccountControl";
        if (user.NativeGuid == null) return false;

        if (user.Properties[uac] != null && user.Properties[uac].Value != null)
        {
            var userFlags = (UserFlags)user.Properties[uac].Value;
            return userFlags.Contains(UserFlags.AccountDisabled);
        }

        return false;
}

但是,memberInfo.Type只能区分身份是用户帐户还是TFS组。众所周知,当您设置某人的权限时,您会选择添加帐号或TFS组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42699566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档