如何使用Microsoft Graph Client枚举用户的组

时间:2018-03-20 11:48:41

标签: c# azure-devops

我正在使用GraphHttpClient类来尝试并检索用户是Visual Studio Team Services中成员的所有组。我可以完全连接到VSTS并运行以下代码,但我经常会遇到VSTS内置帐户的错误。我不确定我做错了什么或如何纠正这个问题,以便代码毫无例外地运行。

循环所有用户并生成他们所属的群组列表的最佳方法是什么?

GraphHttpClient graphClient = connection.GetClient<GraphHttpClient>();
PagedGraphUsers users = graphClient.ListUsersAsync().Result;

foreach (var user in users.GraphUsers)
{
    if (user.Origin.Equals("aad"))
    {                    
        var ent = graphClient.ListMembershipsAsync(user.Descriptor).Result.ToList();
        foreach (var graphMembership in ent)
        {
            var group = graphClient.GetGroupAsync(graphMembership.ContainerDescriptor).Result;

            Console.Out.WriteLine("{0},{1}",
                user.PrincipalName.PadRight(20),
                group.PrincipalName);
        }
    }
    else
    {
        Console.Out.WriteLine("{0},Service Accounts",
            user.DisplayName.PadRight(20));
    }
}

当我删除I​​F语句并让所有用户通过ListMememberhships时,我收到此错误:

Unhandled Exception: System.AggregateException: One or more errors occurred. ---> Microsoft.VisualStudio.Services.Graph.InvalidSubjectTypeException: acs``

1 个答案:

答案 0 :(得分:0)

以acs开头的描述符是服务帐户,例如Hosted VS2017代理服务,TeamFoundationService。

所以你可以改变这样的条件:

if (!user.Descriptor.ToString().StartsWith("acs"))
相关问题