You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中仅获取所有@ODATA.NEXTLINK,避免爬取数据?

仅获取Microsoft Graph用户分页的@odata.nextLink列表(PowerShell实现)

核心思路

要避免爬取用户数据、只收集分页链接,关键是让Graph API返回空数据集合的同时保留@odata.nextLink。通过设置$select=(空字段选择)和最大单页数量$top=999,可以最小化每次请求的数据量,快速遍历所有分页链接。

PowerShell代码实现

# 初始化存储nextLink的数组
$nextLinkList = @()
# 初始请求地址:空$select返回空数据,$top设为Graph用户接口的最大单页量
$currentRequestUrl = "https://graph.microsoft.com/v1.0/users?`$top=999&`$select="
# 从已有的Graph上下文获取认证令牌(需先执行Connect-MgGraph完成认证)
$authHeaders = @{
    "Authorization" = "Bearer $((Get-MgContext).AccessToken)"
}

# 循环遍历所有分页链接
do {
    # 发送请求,仅获取空数据和nextLink
    $apiResponse = Invoke-RestMethod -Uri $currentRequestUrl -Headers $authHeaders -Method Get
    # 如果存在nextLink,加入列表并更新下一次请求地址
    if ($apiResponse.'@odata.nextLink') {
        $nextLinkList += $apiResponse.'@odata.nextLink'
        $currentRequestUrl = $apiResponse.'@odata.nextLink'
    }
    # 没有nextLink则终止循环
    else {
        $currentRequestUrl = $null
    }
} while ($currentRequestUrl)

# 输出所有收集到的nextLink
$nextLinkList

关键细节说明

  • $select=:强制Graph API不返回任何用户字段,只返回空的value数组和分页链接,彻底避免爬取用户数据。
  • $top=999:这是Microsoft Graph用户列表接口支持的最大单页数量,能减少分页次数,提升收集链接的效率。
  • 认证:代码依赖Connect-MgGraph完成的上下文认证,如果你用其他方式获取令牌,替换$authHeaders中的令牌值即可。

批量请求的后续处理

收集完所有@odata.nextLink后,可按10-20个一组构造Graph批量请求:

  1. 提取每个nextLink中https://graph.microsoft.com/v1.0之后的相对路径(比如/users?$skiptoken=xxx)。
  2. 构造批量请求JSON(示例):
{
  "requests": [
    {"id": "1", "method": "GET", "url": "/users?$skiptoken=..."},
    {"id": "2", "method": "GET", "url": "/users?$skiptoken=..."},
    // 最多添加20个请求
  ]
}
  1. 用Invoke-RestMethod发送到https://graph.microsoft.com/v1.0/$batch接口,批量获取用户数据。

内容的提问来源于stack exchange,提问作者Olivier Ernest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:45:11