Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 2015年与TFS的互动(内部)_C#_Tfs_Tfs 2015 - Fatal编程技术网

C# 2015年与TFS的互动(内部)

C# 2015年与TFS的互动(内部),c#,tfs,tfs-2015,C#,Tfs,Tfs 2015,我正在为特定TFS集合创建一个包含所有TFS项目、用户及其关联TFS组的导出文件。(使用ITeamProjectCollectionService,IIdentialManagementService) 我注意到我也收到了残疾的广告用户。如何将禁用的广告用户从列表中筛选出来?我无法直接访问广告环境。 Microsoft.TeamFoundation.Server.Identity不包含此属性 Uri configurationServerUri = new Uri(environ

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

我注意到我也收到了残疾的广告用户。如何将禁用的广告用户从列表中筛选出来?我无法直接访问广告环境。 Microsoft.TeamFoundation.Server.Identity不包含此属性

        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 });
                            }
                        }
                    }
                }
            }
        }
uriconfigurationserveruri=新的Uri(environmentConfig.Uri);
TfsConfigurationServer configurationServer=TfsConfigurationServerFactory.GetConfigurationServer(configurationServerUri);
var tpcService=configurationServer.GetService();
foreach(tpcService.GetCollections()中的TeamProjectCollection tpc)
{
var tfsProjectCollection=new tfstreamprojectcollection(新Uri(environmentConfig.Uri+“/”+tpc.Name),environmentCredential);
var vcs=tfsProjectCollection.GetService();
var sec=tfsProjectCollection.GetService();
var teamProjects=vcs.GetAllTeamProjects(false);
foreach(teamProject中的var teamProject)
{
var appGroups=sec.ListApplicationGroups(teamProject.ArtifactUri.AbsoluteUri);
foreach(appGroups中的var组)
{
Identity[]groupMembers=sec.readidentifications(SearchFactor.Sid,新字符串[]{group.Sid},QueryMembership.Expanded);
foreach(groupMembers中的身份成员)
{
如果(member.Members!=null)
{
foreach(member.Members中的字符串memberSid)
{
Identity memberInfo=sec.ReadIdentity(SearchFactor.Sid、memberSid、QueryMembership.Expanded);
if(memberInfo.Type!=IdentityType.WindowsUser)
继续;
添加(新的TfsPermission{Collection=tfsProjectCollection.Name,TeamProject=TeamProject.Name,
User=memberInfo.AccountName,Domain=memberInfo.Domain,Group=Group.DisplayName});
}
}
}
}
}
}
致以最良好的祝愿,
Jens

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

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
                                });
       }
}
然后检查这些帐户是否在广告中被禁用,就像Starain说的,使用TFSAPI无法做到这一点。但是,您可以使用下面的方法来检查上面的每个帐户,如果它在AD中被禁用:

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

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

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
                                });
       }
}
然后检查这些帐户是否在广告中被禁用,就像Starain说的,使用TFSAPI无法做到这一点。但是,您可以使用下面的方法来检查上面的每个帐户,如果它在AD中被禁用:

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

您能给我们看一下代码吗?添加了代码。我们循环遍历每个标识并将它们添加到列表中。函数返回标识列表。我想筛选出Active Directory中被禁用的用户。你能给我们看一下代码吗?添加了代码。我们循环遍历每个标识并将它们添加到列表中。函数返回标识列表。我想筛选出Active Directory中禁用的用户。确实如此。谢谢,但你怎么知道广告帐户已禁用?@Jens使用TFS API你无法知道广告帐户是否已禁用。您需要使用AD API来检查用户状态@Jens我已经编辑了回复。TFS API没有排除这些禁用用户的方法。感谢您的反馈!我现在正在使用额外的代码来检测用户的状态。@Tingting0929 MSFT是的,使用AD API完成了这个任务。谢谢你的反馈。谢谢,但你怎么知道广告帐户已禁用?@Jens使用TFS API你无法知道广告帐户是否已禁用。您需要使用AD API来检查用户状态@Jens我已经编辑了回复。TFS API没有排除这些禁用用户的方法。感谢您的反馈!我现在正在使用额外的代码来检测用户的状态。@Tingting0929 MSFT是的,使用AD API完成了这个任务。谢谢你的反馈