通过 objectids 获取多个 users/groups

Getting multiple users/groups by objectids

我有一个 users/groups 的 objectid 列表,我想解析它们以显示姓名和个人资料照片。我不想对每个 objectid 发出单独的请求,而是想对它们进行批处理并在一个响应中获得所有结果。有可用的 API 吗?从我所做的搜索中,我找不到类似的东西。如果这样的 API 不存在,是否有任何提示可以提高效率?

谢谢, 波阿斯

我认为这不可能。

似乎 $filter 查询参数在对 id 进行过滤时不喜欢 "or" 表达式。

例如:https://graph.microsoft.com/beta/users/?$filter=(usageLocation eq 'US') and (city eq 'Redmond') 工作正常。

但是当 id 属性 添加到这样的表达式中时: https://graph.microsoft.com/beta/users/?$filter=(usageLocation eq 'US') and (city eq 'Redmond') or (id eq 'f19096bf-a58c-46ba-9ffd-0344f1daecf8')

然后失败 Unsupported or invalid query filter clause specified for property 'id' of resource 'User'

如果您能在要检索的对象之间找到一些共同点,您也许可以批量获取它们。

这是我们将很快添加的一项功能(一个名为 getById 的新操作),它允许您指定最多 1000 个对象以从 Microsoft Graph 中提取(尽管目前仅限于目录对象)。这类似于 Azure AD Graph 当前支持的功能 https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/functions-and-actions#getObjectsByObjectIds

此新操作可用时将更新此线程。

希望对您有所帮助,

也许 Dan 忘记了线程。有效的 getById 是要走的路。

以下是我如何获取用户的所有组:

var groupIds = new List<string>();
var groups = awai client.Users[userId].GetMemberGroups(false).Request().PostAsync();
groupIds.AddRange(groups);
while(groups.NextPageRequest != null)
{
    groups = await groups.NextPageRequest.PostAsync();
    groupIds.AddRange(groups);
}
var groupNames = new List<string>();
var groupQuery = await client.DirectoryObjects.GetByIds(groupIds,new[] { "group" }).Request().Select("DisplayName").PostAsync();
foreach (Group group in groupQuery)
{
    groupNames.Add(group.DisplayName);
}
while (groupQuery.NextPageRequest != null)
{
    groupQuery = await groupQuery.NextPageRequest.PostAsync();
    foreach (Group group in groupQuery)
    {
        groupNames.Add(group.DisplayName);
    }
}