之前在SharePoint powershell脚本测试的时候,在大数据Document Library(大概几万个文件)中调用了 $list.items,抛出了如下异常
The following exception occurred while trying to enumerate the collection:
"Attempted to use an object that has ceased to exist. (Exception from HRESULT:
0x80030102 (STG_E_REVERTED))".
在查询了一些资料之后,把问题定位原因定位到SharePoint Web Application的 General Settings-->Resource Throttling设置,但是SharePoint不建议修改该设置,可能会导致Performance问题,参考微软文档
找到了解决方案,通过分页的方式获取item数据。
例如删除大数据list中的所有item,示例如下:
Add-PSSnapin Microsoft.SharePoint.Powershell -ea SilentlyContinue
$web = get-spweb "Site URL"
$list = $web.lists["Library Title"]
$query = New-Object Microsoft.SharePoint.SPQuery
$query.ViewAttributes = "Scope='Recursive'"
$query.RowLimit = 1000
$query.ViewFields = "<FieldRef Name='ID'/>"
$query.ViewFieldsOnly = $true
do
{
$listItems = $list.GetItems($query)
$query.ListItemCollectionPosition = $listItems.ListItemCollectionPosition
foreach($item in $listItems)
{
Write-Host "Deleting Item - $($item.Id)"
$list.GetItemById($item.Id).delete()
}
}
while ($query.ListItemCollectionPosition -ne $null)
希望对大家有所帮助