我正在尝试编写一个脚本,将文件从一个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:输入字符串的格式不正确”
如何保存字段?这有可能吗?
答案 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()
方法。