0

所以我试图将一个 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())); 
}

我的问题

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

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

4

1 回答 1

0

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

我有一个自定义列表,将数千个列表项组织到文件夹中。但是,出于报告目的,用户最终会创建平面视图并在查找列上进行过滤,因此将这些组织到文件夹中并不能帮助绕过这些报告的列表项阈值。我想归档满足某些条件的列表项(在我的情况下,它们已经被组织到子文件夹 /Topic/Year 中,所以我决定编写一些 PowerShell 来遍历源列表的 SPList.Folders 集合,并且为了测试,移动任何名为“2013”​​的文件夹到目标列表中的相同文件夹结构。

这篇博文最终让我找到了解决方案。当我尝试使用 MoveTo 将项目从源列表移动到目标列表时,该项目消失了(孤立?即使使用 SPM,我似乎也找不到它)。我最终不得不在目标列表中创建一个新项目,从源项目复制所有可写字段值并调用 $item.Update(),使用 MoveTo 将新项目移动到正确的位置(没有更新、系统更新或任何其他为此需要调用),然后删除源项目。

让我知道代码示例是否有帮助,但我认为上面的链接应该涵盖所有内容。所有功劳归功于博客作者 Stian Kirkeberg 和他引用的来源。我只是在增加曝光率,因为在找到他的解决方案之前我在 SO 上发现了这个问题。

于 2015-05-05T17:57:41.507 回答