使用.MoveTo将SharePoint ListItem移动到另一个列表后,它将消失

时间:2015-03-02 14:05:28

标签: powershell sharepoint splist

所以我试图将SPListItem从列表移动到另一个存档列表。 这是我的代码

$Query = New-Object Microsoft.SharePoint.SPQuery;
$Query.Folder = $FolderToMoveFrom

ForEach ($Item in $ItemList.GetItems($Query))
{
    $a = $web.Url;
    $b = $FolderToMoveTo.Url;
    $c = $a + "/" + $b;
    $Name = $Item.Name;
    write-host "Copy Item " $Name "to" $c;

    $Web.GetFile($Item.Url).MoveTo([System.String]::format("{0}/{1}_.000",$FolderToMoveTo.Url,$Item.ID.ToString())); 
}

我的问题

运行脚本后,Items就会消失。我的脚本不会抛出异常。我认为问题可能是,在向其添加新项目之后必须更新列表。但是,如果我在ForEach中添加$Item.Update();,我会得到“条目不存在”(这是可以理解的,因为我只是移动了项目)。

所以我的问题是,如何正确更新存档列表,以便我的列表显示我刚刚移动的项目?

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。我不认为你包含了你的完整代码片段,因为它不清楚FolderToMoveTo来自哪里(不同的列表?),但由于我遇到了类似的症状(列表项目在使用MoveTo时消失了),我想我&# 39; d发布我的经验和解决方案,以防它帮助其他人或让其他人注意并发布更好的解决方案。

我有一个自定义列表,其中有数千个列表项组织到文件夹中。但是,出于报告目的,用户最终会在查找列上创建平面视图和过滤,因此组织到文件夹无助于绕过这些报表的列表项阈值。我想存档符合特定条件的列表项(在我的情况下,它们已经组织成子文件夹/主题/年,所以我决定编写一些PowerShell来遍历源列表的SPList.Folders集合,并进行测试,移动任何名为" 2013"的文件夹到目标列表中的相同文件夹结构。

This blog post最终让我找到了解决方案。当我尝试使用MoveTo将项目从源列表移动到目标列表时,该项目消失了(孤立?我甚至无法使用SPM找到它)。我最终不得不在目标列表中创建一个新项目,从源项目中复制所有可写字段值并调用$ item.Update(),使用MoveTo将新项目移动到正确的位置(无更新,SystemUpdate或任何其他需要调用此方法,然后删除源项目。

如果代码示例有帮助,请告诉我,但我认为上面的链接应该涵盖所有内容。所有归功于博客作者Stian Kirkeberg以及他引用的资料。我找到他的解决方案之前就在SO上发现了这个问题,我只是增加曝光率。