首页 > 解决方案 > SharePoint REST - 使用 skiptoken 获取列表项提供 HTTP 403

问题描述

我正在使用 PowerShell 脚本从 SharePoint Online 网站获取一堆列表项。我需要使用

/_api/web/lists/getbytitle('MyList')/items

REST 调用。
我可以很好地调用这个端点并接收前 100 个项目。但是,当我调用响应中收到的“skiptoken”的 URL 时,我得到一个HTTP 403 (Forbidden).

我究竟做错了什么?

标签: listrestpowershellsharepoint-online

解决方案


在挣扎之后,我决定重新使用 CSOM 和 CAML 查询。这不像 REST 服务那样灵活,并且使处理结果变得更加困难,但成功了(代码功能强大,但将其拆分可能是个好主意):

$context = New-Object Microsoft.SharePoint.Client.ClientContext($site)
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($user , $password)
$context.Credentials = $credentials

$query = New-Object Microsoft.SharePoint.Client.CamlQuery
$query.ViewXml = '...'

$web = $ctx.Web
$lists = $web.Lists
$list = $lists.GetById($listID)

$ctx.Load($lists)
$ctx.Load($list)
$ctx.ExecuteQuery()

$resultCollection = New-Object 'System.Collections.ArrayList'

do {

    $items = $list.GetItems($query)
    $ctx.Load($items)
    $ctx.ExecuteQuery()

    $items | ForEach-Object {
        $item = #process item here
        $resultCollection.Add($item) |Out-Null
    }

    $query.ListItemCollectionPosition = $items.ListItemCollectionPosition #advance cursor

} while ($query.ListItemCollectionPosition -ne $null)

推荐阅读