无法复制元数据

osh*_*nen 5 powershell sharepoint powershell-2.0 sharepoint-2010

背景:

我有以下脚本,它应该将单个文件从一个位置复制到另一个位置,并复制修改日期元数据.

这一切都有效,除了它不复制修改日期元数据并显示在修改日期元数据字段/列中复制文件的日期/时间:

当我将源文件修改日期输出到屏幕时,它显示正确的修改日期,但似乎没有应用于新位置的文件.


脚本:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Variables for Processing
$WebURL="https://sharepoint.oshirowanen.com/sites/oshirodev"
$SourceFile="https://sharepoint.oshirowanen.com/sites/oshirodev/folder1/user1/test.doc"
$TargetLibrary="folder2"

#Get Objects
$Web = Get-SPWeb $WebURL
$SourceFile = $Web.GetFile($SourceFile)
$TargetLibrary = $Web.GetFolder($TargetLibrary)

#Copy the file into the Target library
$File = $TargetLibrary.Files.Add($SourceFile.Name, $SourceFile.OpenBinary(), $true)

#Copy Meta-Data
#METADATA UPDATE DOES NOT WORK
$item = $File.Item

#Original attempt - not working
#$item["Modified"] = $SourceFile.TimeLastModified.ToLocalTime()

#Suggested attempt 2 - not working
#$itemModified = ([DateTime]$SourceFile.Item["Modified"]).DateTime 
#$item["Modified"] = $itemModified 

#Suggested attempt 2
$File.item["Modified"] = $SourceFile.item["Modified"]

##Check value of sourcefiles modifieddate - shows correct modified date
write-host $SourceFile.item["Modified"]

#Update
$item.UpdateOverwriteVersion()
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

将当前日期显示为修改日期

但是,写主机显示正确的修改日期:

PS C:\Users\Oshiro\Desktop\scripts> .\MetaData.ps1
10 August 2018 10:00:07
PS C:\Users\Oshiro\Desktop\scripts>
Run Code Online (Sandbox Code Playgroud)

题:

谁能看到我做错了什么?


EXPORT-SPWEB ATTEMPT:

脚本:

Export-SPWeb -Identity "https://sharepoint.oshirowanen.com/sites/oshirodev/folder1/user1/" -ItemUrl "lists/Customlist" -Path "c:\sharepoint_export\customlist_export.cmp" -IncludeUserSecurity
Run Code Online (Sandbox Code Playgroud)

错误:

Export-SPWeb : Cannot find an SPWeb object with Id or Url : https://sharepoint.oshirowanen.com/sites/oshirodev/folder1/user1/.
At line:1 char:13
+ Export-SPWeb <<<<  -Identity "https://sharepoint.oshirowanen.com/sites/oshirodev/folder1/user1/" -ItemUrl "lists/Customlist" -Path "c:\sharepoint_export\customlist_export.cmp" -IncludeUserSecurity
    + CategoryInfo          : InvalidData: (Microsoft.Share...CmdletExportWeb:SPCmdletExportWeb) [Export-SPWeb], SPCmdletPipeBindException
    + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletExportWeb
Run Code Online (Sandbox Code Playgroud)

tuk*_*kan 0

您的脚本对我来说似乎很好,只需更改一行(这些列通常被认为是只读的,但可以修改):

# new_file["Modified"] = original_file["Modified"]
$File.item["Modified"] = $SourceFile.item["Modified"]
Run Code Online (Sandbox Code Playgroud)

您会发现一些与此问题相关的主题。有些帖子会告诉您export-spweb不要import-spweb保留创建/修改日期、创建者等项目,但现在情况并非如此。

除了修复线路之外,您还可以检查以下内容:

  • 图形用户界面IncludeUserSecurity

IncludeUserSecurity通过 GUI启用。您需要:选中中央管理控制台/备份部分上的复选框-> “导出完全安全性”

导出完整安全部分

  • 如果您应该使用导出/导入-SPWeb,则有一个选项-IncludeUserSecurity

您可以使用包含参数的Export-SPWebImport-SPWeb编写脚本[-IncludeUserSecurity]

编辑 - 由于评论 - 用于Export-SPWeb仅导出文件列表

正如 oshirowanen 正确指出的那样,您无法使用 Export-SPWeb 导出单个文件 - 您只能导出整个站点、列表或库

我提供了一种导出/导入列表的方法:

通过导出列表Export-SPWeb(网站集不是根目录):

Export-SPWeb -Identity "https://sharepoint.oshirowanen.com/sites/oshirodev/folder1/user1/" -ItemUrl "lists/Customlist" -Path "c:\sharepoint_export\customlist_export.cmp" -IncludeUserSecurity
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记在网站集名称中包含最后一个反斜杠。

(创建:在 SharePoint 中创建列表编辑列表或通过Sharepoint 设计器创建自定义列表)。

导入列表应该很简单:

Import-SPWeb "https://sharepoint.oshirowanen.com/sites/oshirodev/folder2/" -Path "c:\sharepoint_export\customlist_export.cmp" -IncludeUserSecurity
Run Code Online (Sandbox Code Playgroud)