CamlQueryは5000件を超えると、RowLimitと条件を指定しても条件で絞り込まれずRowLimitも効かない。
→RowLimitで取得し、For文の中のIf文で条件で絞り込んで削除する。
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
$ctx.credentials = $creds
try{
$caml = "<View Scope='RecursiveAll'>
<ViewFields><FieldRef Name='ID'/><FieldRef Name='Title'></ViewFields>
<Rowlimit Paged='TRUE'>5000</Rowlimit></View>"
$list=$ctx.Web.Lists.GetByTitle("リスト表示名")
$pagePosition = $null
Do{
$query = New-Object Microsoft.SharePoint.Client.CamlQuery
$query.ListItemCollectionPosition = $pagePosition
$query.ViewXml = $caml
$listItems = $list.GetItems($query)
$ctx.Load($listItems)
$ctx.ExecuteQuery()
$pagePosition = $listItems.ListItemCollectionPosition
foreach($item in $listItems){
if($item["Title"] -eq "削除したい値"){
$listItems.GetById($item["ID"]).DeleteObject()
$ctx.ExecuteQuery()
}
}
until($pagePosition -eq $null)
}
catch{
write-host "$($_.Exception.Message)" -foregroundcolor red
}
$ctx.Dispose()
参考
stackexchange:Deleting over 5000 items SharePoint Online Powershell
SharePoint Online PowerShell 全アイテム削除