[玩转系统] SharePoint Online:使用 PowerShell 将文档库复制到另一个网站
作者:精品下载站 日期:2024-12-14 15:46:23 浏览:14 分类:玩电脑
SharePoint Online:使用 PowerShell 将文档库复制到另一个网站
要求:使用 PowerShell 将文档库复制到另一个 SharePoint Online 网站。
如何将文档库复制到 SharePoint Online 中的另一个网站?
您是否曾经需要将文档库从一个 SharePoint Online 网站复制到另一个网站?也许您需要将内容从旧站点移动到新站点,或者为开发工作创建一个“测试”环境。在本文中,我将向您展示如何使用 PowerShell 在两个站点之间复制文档库。让我们开始吧!
没有直接的方法可以在 SharePoint Online 中复制文档库。但是,您可以使用此解决方法:
- 将源文档库另存为模板 - 转至源库 >> 单击“设置”齿轮 >> 选择“库设置”>> 单击“另存为模板”。详细信息:如何在 SharePoint Online 中将列表另存为模板?
- 下载列表模板并将其上传到目标网站
- 从列表模板创建新文档库 - 登录到目标 SharePoint Online 站点 >> 单击“设置”齿轮图标,然后单击“添加应用程序”。您可以使用页面底部的分页来查找自定义列表模板,或使用“查找应用程序”搜索框并选择您的列表模板。详细信息:SharePoint Online:使用 PowerShell 从自定义模板创建列表
- 将源文档库中的所有项目复制到新文档库 - 从现有列表模板创建文档库的新实例后,您可以将源文档库中的所有文件和文件夹复制到新文档库中。目标库,方法是选择源库中的所有项目,然后选择工具栏中的“复制到”按钮,然后指定在步骤 3 中创建的文档库。
听起来像是很多手工工作?那么,如果您需要将文档库从一个 SharePoint Online 站点复制到另一个站点,PowerShell 就是您的最佳选择。让我向您展示如何使用 PowerShell 将文档库(包括其所有内容)从一个站点复制到另一个站点。
在运行此脚本之前,必须在源站点和目标站点中启用自定义脚本!如何在 SharePoint Online 中启用自定义脚本?SharePoint Online:使用 PowerShell 将文档库复制到另一个网站集
要复制文档库及其文件和文件夹,请使用此 PowerShell 脚本。您可以将文档库复制到相同或不同的站点。
#Function to Copy library to Another site
Function Copy-PnPLibrary
{
param (
[parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$SourceSiteURL,
[parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$DestinationSiteURL,
[parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$SourceLibraryName,
[parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$DestinationLibraryName
)
Try {
#Connect to the Source Site
$SourceConn = Connect-PnPOnline -URL $SourceSiteURL -Interactive -ReturnConnection
$SourceCtx = $SourceConn.Context
#Get the Source library
$SourceLibrary = Get-PnPList -Identity $SourceLibraryName -Includes RootFolder -Connection $SourceConn
#Get the List Template
$SourceRootWeb = $SourceCtx.Site.RootWeb
$SourceListTemplates = $SourceCtx.Site.GetCustomListTemplates($SourceRootWeb)
$SourceCtx.Load($SourceRootWeb)
$SourceCtx.Load($SourceListTemplates)
$SourceCtx.ExecuteQuery()
$SourceListTemplate = $SourceListTemplates | Where {$_.Name -eq $SourceLibrary.id.Guid}
$SourceListTemplateURL = $SourceRootWeb.ServerRelativeUrl+"/_catalogs/lt/"+$SourceLibrary.id.Guid+".stp"
#Remove the List template if exists
If($SourceListTemplate)
{
#Remove-PnPFile -ServerRelativeUrl $SourceListTemplateURL -Recycle -Force -Connection $SourceConn
$SourceListTemplate = Get-PnPFile -Url $SourceListTemplateURL -Connection $SourceConn
$SourceListTemplate.DeleteObject()
$SourceCtx.ExecuteQuery()
}
Write-host "Creating List Template from Source Library..." -f Yellow -NoNewline
$SourceLibrary.SaveAsTemplate($SourceLibrary.id.Guid, $SourceLibrary.id.Guid, [string]::Empty, $False)
$SourceCtx.ExecuteQuery()
Write-host "Done!" -f Green
#Reload List Templates to Get Newly created List Template
$SourceListTemplates = $SourceCtx.Site.GetCustomListTemplates($SourceRootWeb)
$SourceCtx.Load($SourceListTemplates)
$SourceCtx.ExecuteQuery()
$SourceListTemplate = $SourceListTemplates | Where {$_.Name -eq $SourceLibrary.id.Guid}
#Connect to the Destination Site
$DestinationConn = Connect-PnPOnline -URL $DestinationSiteURL -Interactive -ReturnConnection
$DestinationCtx = $DestinationConn.Context
$DestinationRootWeb = $DestinationCtx.Site.RootWeb
$DestinationListTemplates = $DestinationCtx.Site.GetCustomListTemplates($DestinationRootWeb)
$DestinationCtx.Load($DestinationRootWeb)
$DestinationCtx.Load($DestinationListTemplates)
$DestinationCtx.ExecuteQuery()
$DestinationListTemplate = $DestinationListTemplates | Where {$_.Name -eq $SourceLibrary.id.Guid}
$DestinationListTemplateURL = $DestinationRootWeb.ServerRelativeUrl+"/_catalogs/lt/"+$SourceLibrary.id.Guid+".stp"
#Remove the List template if exists
If($DestinationListTemplate)
{
#Remove-PnPFile -ServerRelativeUrl $DestinationListTemplateURL -Recycle -Force -Connection $DestinationConn
$DestinationListTemplate = Get-PnPFile -Url $DestinationListTemplateURL -Connection $DestinationConn
$DestinationListTemplate.DeleteObject()
$DestinationCtx.ExecuteQuery()
}
#Copy List Template from source to the destination site
Write-host "Copying List Template from Source to Destination Site..." -f Yellow -NoNewline
Copy-PnPFile -SourceUrl $SourceListTemplateURL -TargetUrl ($DestinationRootWeb.ServerRelativeUrl+"/_catalogs/lt") -Force -OverwriteIfAlreadyExists -Connection $SourceConn
Write-host "Done!" -f Green
#Reload List Templates to Get Newly created List Template
$DestinationListTemplates = $DestinationCtx.Site.GetCustomListTemplates($DestinationRootWeb)
$DestinationCtx.Load($DestinationListTemplates)
$DestinationCtx.ExecuteQuery()
$DestinationListTemplate = $DestinationListTemplates | Where {$_.Name -eq $SourceLibrary.id.Guid}
#Create the destination library from the list template
Write-host "Creating New Library in the Destination Site..." -f Yellow -NoNewline
If(!(Get-PnPList -Identity $DestinationLibraryName -Connection $DestinationConn))
{
#Create the destination library
$ListCreation = New-Object Microsoft.SharePoint.Client.ListCreationInformation
$ListCreation.Title = $DestinationLibraryName
$ListCreation.ListTemplate = $DestinationListTemplate
$DestinationList = $DestinationCtx.Web.Lists.Add($ListCreation)
$DestinationCtx.ExecuteQuery()
Write-host "Library '$DestinationLibraryName' created successfully!" -f Green
}
Else
{
Write-host "Library '$DestinationLibraryName' already exists!" -f Yellow
}
Write-host "Copying Files and Folders from the Source to Destination Site..." -f Yellow
$DestinationLibrary = Get-PnPList $DestinationLibraryName -Includes RootFolder -Connection $DestinationConn
#Copy All Content from Source Library's Root Folder to the Destination Library
If($SourceLibrary.ItemCount -gt 0)
{
#Get All Items from the Root Folder of the Library
$global:counter = 0
$ListItems = Get-PnPListItem -List $SourceLibraryName -Connection $SourceConn -PageSize 500 -Fields ID -ScriptBlock {Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete `
(($global:Counter / $SourceLibrary.ItemCount) * 100) -Activity "Getting Items from List" -Status "Getting Items $global:Counter of $($SourceLibrary.ItemCount)"}
$RootFolderItems = $ListItems | Where { ($_.FieldValues.FileRef.Substring(0,$_.FieldValues.FileRef.LastIndexOf($_.FieldValues.FileLeafRef)-1)) -eq $SourceLibrary.RootFolder.ServerRelativeUrl}
Write-Progress -Activity "Completed Getting Items from Library $($SourceLibrary.Title)" -Completed
#Copy Items to the Destination
$RootFolderItems | ForEach-Object {
$DestinationURL = $DestinationLibrary.RootFolder.ServerRelativeUrl
Copy-PnPFile -SourceUrl $_.FieldValues.FileRef -TargetUrl $DestinationLibrary.RootFolder.ServerRelativeUrl -Force -OverwriteIfAlreadyExists -Connection $SourceConn
Write-host "`tCopied $($_.FileSystemObjectType) '$($_.FieldValues.FileRef)' Successfully!" -f Green
}
}
#Cleanup List Templates in source and destination sites
$SourceListTemplate = Get-PnPFile -Url $SourceListTemplateURL -Connection $SourceConn
$DestinationListTemplate = Get-PnPFile -Url $DestinationListTemplateURL -Connection $DestinationConn
$SourceListTemplate.DeleteObject()
$DestinationListTemplate.DeleteObject()
$SourceCtx.ExecuteQuery()
$DestinationCtx.ExecuteQuery()
#Remove-PnPFile -ServerRelativeUrl $SourceListTemplateURL -Recycle -Force -Connection $SourceConn
#Remove-PnPFile -ServerRelativeUrl $DestinationListTemplateURL -Recycle -Force -Connection $DestinationConn
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
}
#Parameters
$SourceSiteURL = "https://crescent.sharepoint.com/sites/Retail"
$DestinationSiteURL = "https://crescent.sharepoint.com/sites/warehouse"
$SourceLibraryName = "Invoices"
$DestinationLibraryName = "Invoices V2"
#Call the function to copy document library to another site
Copy-PnPLibrary -SourceSiteURL $SourceSiteURL -DestinationSiteURL $DestinationSiteURL -SourceLibraryName $SourceLibraryName -DestinationLibraryName $DestinationLibraryName
您还可以使用此 PowerShell 方法将文档库移动到另一个站点!只需添加一个删除源文档库的步骤(我们称之为“移动”!)。确保您拥有对源网站和目标网站的网站集管理员访问权限,并且在运行此脚本之前启用自定义脚本!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[短剧合集] 2025年06月2日 精选+付费短剧推荐39部
[软件合集] 25年6月2日 精选软件18个
[软件合集] 25年6月1日 精选软件15个
[短剧合集] 2025年06月1日 精选+付费短剧推荐59部
[短剧] 2025年05月31日 精选+付费短剧推荐58部
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag