SharePoint 2013 PowerShell:跨网站集迁移文档库并保留元数据
针对你遇到的SharePoint 2013跨站点集迁移文档库且保留元数据的问题,我给你几个经过实战验证的可行方案:
这是官方原生支持的方法,能完整保留修改人、修改日期、版本历史甚至权限,稳定性最高。操作步骤如下:
首先在SharePoint管理Shell中执行导出命令,把源文档库打包:
# 替换为你的实际参数 $sourceWebUrl = "http://你的源站点集/子站点" $listName = "需要迁移的文档库名称" $exportPath = "C:\SPMigration\DocLibBackup.cmp" # 执行导出,参数说明: # -IncludeVersions All:保留所有文件版本 # -IncludeUserSecurity:保留权限和用户相关元数据 # -NoFileCompression:避免压缩耗时,大库推荐使用 Export-SPWeb -Identity $sourceWebUrl -ItemUrl "/子站点/$listName" -Path $exportPath -IncludeVersions All -IncludeUserSecurity -NoFileCompression
然后导入到目标站点集:
$targetWebUrl = "http://你的目标站点集/子站点" $importPath = "C:\SPMigration\DocLibBackup.cmp" # 执行导入,-UpdateVersions Overwrite表示覆盖目标库已有内容(如果目标库已存在),按需选择Append Import-SPWeb -Identity $targetWebUrl -Path $importPath -IncludeUserSecurity -UpdateVersions Overwrite
注意:运行命令的账号需要同时拥有源和目标站点集的管理员权限;如果文档库规模较大,建议在非业务高峰时段操作,避免影响用户使用。
方案2:使用Content Deployment Wizard(可视化免费工具)
如果你不太熟悉PowerShell,这个微软官方提供的可视化工具是不错的选择,专门针对跨站点集的内容迁移:
- 安装好工具后,先连接到源站点集,找到要迁移的文档库
- 勾选「Include user security」和「Include all versions」选项,确保元数据、权限和版本都被保留
- 再连接到目标站点集,选择要导入的位置,确认迁移内容后启动迁移即可
这个工具支持预览迁移内容,还能设置定时迁移计划,适合复杂的迁移场景。
方案3:修正PowerShell脚本以保留元数据
你之前的脚本可能只复制了文件内容,没有处理元数据字段。这里给你一个能保留核心元数据的脚本示例,适合中小型文档库:
# 初始化源和目标站点、文档库 $sourceWeb = Get-SPWeb "http://你的源站点/子站点" $targetWeb = Get-SPWeb "http://你的目标站点/子站点" $sourceList = $sourceWeb.Lists["源文档库名称"] $targetList = $targetWeb.Lists["目标文档库名称"] # 遍历源库所有项目 foreach ($sourceItem in $sourceList.Items) { $sourceFile = $sourceItem.File # 复制文件到目标库(第二个参数$true表示覆盖同名文件) $targetFile = $targetList.RootFolder.Files.Add($sourceFile.Name, $sourceFile.OpenBinary(), $true) $targetItem = $targetFile.Item # 复制核心元数据 $targetItem["Modified By"] = $sourceItem["Modified By"] $targetItem["Modified"] = $sourceItem["Modified"] $targetItem["Created By"] = $sourceItem["Created By"] $targetItem["Created"] = $sourceItem["Created"] # 如果有自定义元数据字段,在这里继续添加复制逻辑 # $targetItem["自定义字段名称"] = $sourceItem["自定义字段名称"] # 关键:用SystemUpdate($false)更新,避免覆盖刚复制的元数据 $targetItem.SystemUpdate($false) } # 释放资源,避免内存泄漏 $sourceWeb.Dispose() $targetWeb.Dispose()
注意:使用这个脚本前,要确保目标文档库的字段结构和源库完全一致,否则元数据复制会失败;大型文档库不推荐用这个方法,效率远低于导出/导入。
内容的提问来源于stack exchange,提问作者MattG
相关产品推荐
相关产品推荐

