如何使用Powershell脚本从Sharepoint中的自定义列表中删除10000个项目

时间:2019-05-12 07:38:15

标签: sharepoint

我的共享点站点列表中有太多项目,我需要从其中删除10000个文件。如何使用Powershell脚本做到这一点。

1 个答案:

答案 0 :(得分:0)

创建查询:

$list =  (Get-Spweb http://devmy101).GetList("http://devmy101/Lists/smarEnteredTerritorialWaters")
$query = New-Object Microsoft.SharePoint.SPQuery;
$query.ViewAttributes = "Scope='Recursive'";
$query.RowLimit = 2000;
$query.Query = '<Where><Gt><FieldRef Name="Created"/><Value Type="DateTime" IncludeTimeValue="TRUE">2013-07-10T14:20:00Z</Value></Gt></Where>';

生成命令(请注意,查询仅限于一次返回2000个项目,并使用ListItemCollectionPosition属性以2000的批次继续检索项目,直到查询完所有项目为止。有关更多信息,请参阅此MSDN文档。)

$itemCount = 0;
$listId = $list.ID;
[System.Text.StringBuilder]$batchXml = New-Object "System.Text.StringBuilder";
$batchXml.Append("<?xml version=`"1.0`" encoding=`"UTF-8`"?><Batch>");
$command = [System.String]::Format( "<Method><SetList>{0}</SetList><SetVar Name=`"ID`">{1}</SetVar><SetVar Name=`"Cmd`">Delete</SetVar></Method>", $listId, "{0}" );

do
{
    $listItems = $list.GetItems($query)
    $query.ListItemCollectionPosition = $listItems.ListItemCollectionPosition
    foreach ($item in $listItems)
    {
        if($item -ne $null){$batchXml.Append([System.String]::Format($command, $item.ID.ToString())) | Out-Null;$itemCount++;}
    }
}
while ($query.ListItemCollectionPosition -ne $null)

$batchXml.Append("</Batch>");
$itemCount;

最后(也是最重要的!),运行查询

$web = Get-Spweb http://inceweb/HKMarineDB;
$web.ProcessBatchData($batchXml.ToString()) | Out-Null;

您将要在SharePoint Management Shell中以Admin身份运行它。 这是Matthew Yarlett的博客文章的逐字翻译。如果他的博客消失了,我将大部分帖子张贴在这里。 http://matthewyarlett.blogspot.com/2013/07/well-that-was-fun-bulk-deleting-items.html