所以我试图将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();
,我会得到"条目不存在"的解释(这是可以理解的,因为我刚刚移动了项目)。
因此,我的问题是,如何正确更新存档列表,使我的列表显示我刚刚移动的项目?
我最近遇到了同样的问题。我不认为您包含了完整的代码片段,因为不清楚FolderToMoveTo来自哪里(不同的列表?),但由于我经历了类似的症状(使用MoveTo时列表项目消失),我想我会发布我的经验和解决方案,以防它能帮助其他人或让其他人注意到并发布更好的解决方案。
我有一个自定义列表,其中数千个列表项被组织到文件夹中。但是,出于报告目的,用户最终会创建平面视图并对查找列进行筛选,因此组织到文件夹中无助于绕过这些报告的列表项阈值。我想归档满足某些条件的列表项(在我的情况下,它们已经被组织到子文件夹/Topic/Year中,所以我决定编写一些PowerShell来迭代SPList.Folders集合的源列表,为了测试,将任何名为"2013"的文件夹移到目标列表中的相同文件夹结构中。
这篇博文最终让我找到了解决方案。当我尝试使用MoveTo将项目从源列表移动到目标列表时,该项目消失了(孤立?即使使用SPM,我似乎也找不到它)。我最终不得不在目标列表中创建一个新项,从源项复制所有可写字段值并调用$item.Update(),使用MoveTo将新项移动到正确的位置(不需要Update、SystemUpdate或任何其他调用),然后删除源项。
让我知道代码示例是否会有所帮助,但我认为上面的链接应该涵盖所有内容。所有的功劳都归功于博客作者Stian Kirkeberg和他引用的消息来源。在找到SO的解决方案之前,我在SO上发现了这个问题,我只是在增加曝光率。