在SharePoint库之间复制文件时保留字段数据

时间:2019-07-16 08:08:45

标签: powershell sharepoint sharepoint-online data-migration

我正在尝试编写一个脚本,将文件从一个SharePoint库复制到同一站点中的另一个库。 某些字段(如创建者,修改者和最后修改者)应保留,如果可能的话,应保留所有字段。

到目前为止,我已经提出了以下建议:

$items = Get-PnPFolderItem -FolderSiteRelativeUrl "OldLibrary" -ItemType File 
foreach($item in $items) {
    #This is a workaround, because there is a bug in Copy-PnPFile
    $item.CopyTo("NewLibrary/$($item.Name)", $true)                   
}
Invoke-PnPQuery

foreach($item in $items) {                                
     $oldItem = Get-PnPFile -Url $item.ServerRelativeUrl -AsListItem
     $newItem = Get-PnpFile -Url "NewLibrary/$($item.Name)" -AsListItem

     Set-PnPListItem -List "NewLibrary" -Identity $newItem.Id -Values @{"Last_x0020_Modified" = $oldItem["Last_x0020_Modified"]; "Author" = $oldItem["Author"]; "Editor" = $oldItem["Editor"]}

}

复制正常。 但是字段没有保留。创建日期,作者和按日期修改的日期显示了当前时间以及执行复制脚本的用户。

我收到一条错误消息:“ Set-PnPListItem:输入字符串的格式不正确”

如何保存字段?这有可能吗?

2 个答案:

答案 0 :(得分:0)

错误是我更新了错误的字段。 我需要更新“已修改”字段,而不是“ Last_x0020_Modified”。另外,作者和编辑者字段需要电子邮件地址。

该解决方案现在看起来像这样,并且运行良好。

Set-PnPListItem -List "NewLibrary" -Identity $newItem.Id -Values @{"Modified" = $oldItem["Modified"]; "Author" = $oldItem["Author"].Email; "Editor" = $oldItem["Editor"].Email}

答案 1 :(得分:0)

我认为很简单。我们所需要知道的是,当在SharePoint中复制文件时,SharePoint会将新ID和其他信息(如修改日期和创建日期)提供给该文件。

但是,当您将文件从一个位置移动到另一个位置时,这些信息不会改变,而是会得到维护。因此,作为软件开发人员,我的建议是在MOVETO()中使用CSOM方法,而不要使用将文件复制到新位置的服务器二进制direct()方法。