如何用PowerShell调用SentinelOne API获取全部应用列表(分页处理)
解决SentinelOne API分页获取全量应用风险列表的PowerShell实现
针对SentinelOne API单次最多返回1000条数据的限制,我们可以通过**循环调用API并传递分页游标(nextCursor)**的方式获取所有记录,具体修改代码如下:
# 初始化存储全量数据的数组 $allApplications = @() # 基础请求参数,替换为你的真实API地址和Token $baseParams = @{ Method = "GET" Headers = @{ "Content-Type" = 'application/json' "Authorization" = 'APIToken YOUR_REAL_API_KEY' } } # 初始请求Uri(不带cursor) $currentUri = "https://SentineloneURL/web/api/v2.1/application-management/risks?endpointTypes=%22server%22&osTypes=%22windows%22&limit=1000" do { # 发送请求 $res = Invoke-RestMethod @baseParams -Uri $currentUri # 将当前页数据追加到全量数组 $allApplications += $res.data # 更新下一次请求的Uri(如果存在nextCursor) if ($res.pagination.nextCursor) { $currentUri = "https://SentineloneURL/web/api/v2.1/application-management/risks?endpointTypes=%22server%22&osTypes=%22windows%22&limit=1000&cursor=$($res.pagination.nextCursor)" } else { # 没有游标时终止循环 $currentUri = $null } } while ($currentUri) # 现在可以遍历$allApplications处理所有数据,例如输出应用名称 $allApplications | ForEach-Object { $_.applicationName }
关键逻辑说明:
- 全量数据存储:用
$allApplications数组累积每一页的返回数据,规避单次请求的数量限制 - 循环请求判断:通过
do-while循环持续发起请求,直到返回结果中没有nextCursor(即所有数据已获取) - 游标传递:每次请求后检查
$res.pagination.nextCursor,如果存在则将其作为参数拼接进下一次请求的Uri中,确保获取下一页数据 - 参数复用:将请求方法、请求头这类固定参数抽离到
$baseParams中,提升代码可维护性
注意事项:
- 替换
YOUR_REAL_API_KEY为你的SentinelOne API Token - 替换
SentineloneURL为你的SentinelOne控制台真实域名 - 如果API返回的分页结构字段名有差异,请根据实际返回的JSON结构调整代码中的对应字段
内容的提问来源于stack exchange,提问作者sush007
相关产品推荐
相关产品推荐

