通过PowerShell将项目重新声明为记录时出错 - “文件已被修改”SHAREPOINT \ system“

时间:2012-10-15 03:04:13

标签: powershell sharepoint-2010

我们已经安排了一个PowerShell脚本,并在过去3-4个月内成功执行(在Test和Prod中)。该脚本的目的是在从外部系统触发某些触发器时更新SharePoint中的文档属性。在没有详细介绍的情况下,下面是用于更新已声明为记录的文档的项属性的代码:

$recordsmanagement=[Microsoft.Office.RecordsManagement.RecordsRepository.Records]
$recordsmanagement::UndeclareItemAsRecord($item)
$item = $list.GetItemById($item.id)     
$item.File.CheckOut()
$item[$sSpFieldName]=$sDbValue
$item.Update()                                          
$item = $list.GetItemById($item.id)                                 
$item.File.CheckIn("")                          
$recordsmanagement::DeclareItemAsRecord($item)

这段代码已经运行了数百次没有问题。出于某种原因,这段代码在一周前开始轰炸最后一行(当重新声明为记录时):

System.Management.Automation.MethodInvocationException: Exception calling "DeclareItemAsRecord" with "1" argument(s): "The file /lib/folder/file.pdf has been modified by SHAREPOINT\system on 10 Oct 2012 00:00:47 -0500."

另一个奇怪的部分是,这只发生在Prod。测试环境似乎执行得很好。我还没有尝试过修改生产,但我很确定我可以使用GetItemById(在CheckIn之后)再次获取$ item对象。我现在有点犹豫不决,因为我想首先得到其他人的观点。

有人对此有任何意见吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为最好的选择是在签到后再次获得该项目。

错误消息表明确实如此。您正在尝试对已修改的SPListItem执行操作。因此,在将其声明为记录之前,请使用GetItemById再次将其拉出来。

为什么它只发生在某些记录和某些环境中我不确定。我猜Sharepoint有点气质。

我也会尝试:

  • 检查
  • 中检查该项目时是否有任何工作流程
  • 如果符合您的要求,请尝试使用SystemUpdate()而不是Update()
祝你好运