代码之家  ›  专栏  ›  技术社区  ›  kiewic

如何使用Azure AD Graph API查询所有直接下属?

  •  0
  • kiewic  · 技术社区  · 7 年前

    我一直在使用以下工具查询经理的所有直接下属:

    var users = activeDirectoryClient.Users
        .Expand(x => x.DirectReports)
        .Where(d => d.ObjectId == objectId);
    
    var foundUsers = users.ExecuteAsync().Result;
    foreach (var foundUser in foundUsers.CurrentPage)
    {
        IUser user = foundUser as User;
        int directReportsCount = user.DirectReports.CurrentPage.Count; // 19
    
        // ...
    
        Console.WriteLine(user.DirectReports.MorePagesAvailable); // false
    }
    

    DirectReports.MorePagesAvailable false .

    如果我单独查询direct reports集合中未包含的其他用户,并展开其管理器,我可以看到该管理器是预期的,因此Azure广告图中存在正确的关系。

    var users = activeDirectoryClient.Users
        .Where(d => d.Manager.ObjectId == objectId);
    

    我得到以下错误:

    参数名称:key'

    使用以下工具查询用户的所有直接下属的正确方法是什么 微软蔚蓝色的ActiveDirectory。图形客户端

    1 回复  |  直到 7 年前
        1
  •  1
  •   Fei Xue    7 年前

    我看到一个例子,一个经理有31个直接下属,但我的代码只返回19个。

    objectId

    使用Microsoft查询用户所有直接下属的正确方法是什么。蔚蓝色的ActiveDirectory。GraphClient?

    MorePagesAvailable 属性并使用 GetNextPageAsync()

    managerId 在该经理的反对下:

        public void PrintDirectReports()
        {
            String managerId="";
            int pageSize=2;
            ActiveDirectoryClient client = GraphHelper.CreateGraphClient();
            int pageIndex = 1;
            var directoryRecports = client.Users[managerId].DirectReports.Take(pageSize).ExecuteAsync().Result;
            Console.WriteLine($"Page{pageIndex++}:");
            foreach (var report in directoryRecports.CurrentPage)
            {
                Console.WriteLine(report.ObjectId);
            }
    
            while (directoryRecports.MorePagesAvailable)
            {
                Console.WriteLine($"Page{pageIndex++}:");
                directoryRecports = directoryRecports.GetNextPageAsync().Result;
                foreach (var report in directoryRecports.CurrentPage)
                {
                    Console.WriteLine(report.ObjectId);
                }
            }
        }