[玩转系统] SharePoint Online:使用 PowerShell 将所有文档库复制到另一个网站
作者:精品下载站 日期:2024-12-15 00:25:51 浏览:14 分类:玩电脑
SharePoint Online:使用 PowerShell 将所有文档库复制到另一个网站
要求:将所有文档库复制到 SharePoint Online 中的另一个网站集。
PowerShell 将文档库从一个网站复制到另一个网站集:
您是否希望将所有 SharePoint Online 文档库从一个站点迁移到另一个站点?如果是这样,您可以使用 PowerShell 轻松复制它们。在 SharePoint Online 中,可以将整个文档库从一个站点复制到另一个站点。如果您想要重用现有库作为新项目的起点,或者想要与另一个站点上的同事共享库,这会很有用。在本教程中,我们将向您展示如何将文档库复制到 SharePoint Online 中的另一个网站。
就我而言,在迁移项目期间,我需要将所有文档库从一个网站集复制到另一个网站集。下面是我用来在网站集之间复制所有库(只是没有实际内容的库)的 PowerShell 脚本:
#Parameters
$SourceSiteURL = "https://crescent.sharepoint.com/sites/Neoma"
$DestinationSiteURL = "https://crescent.sharepoint.com/sites/Neoma-Copy"
#Connect to the source Site
Connect-PnPOnline -URL $SourceSiteURL -Interactive
#Get all document libraries
$SourceLibraries = Get-PnPList | Where {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $False}
#Connect to the destination site
Connect-PnPOnline -URL $DestinationSiteURL -Interactive
#Get All Lists in the Destination
$Libraries = Get-PnPList
ForEach($Library in $SourceLibraries)
{
#Check if the library already exists in target
If(!($Libraries.Title -contains $Library.Title))
{
#Create a document library
New-PnPList -Title $Library.Title -Template DocumentLibrary
Write-host "Document Library '$($Library.Title)' created successfully!" -f Green
}
else
{
Write-host "Document Library '$($Library.Title)' exists already!" -f Yellow
}
}
SharePoint Online:PowerShell 在站点之间复制库及其内容
这次,让我们将所有文档库及其内容(文件、文件夹、子文件夹等)复制到另一个网站集:
#Parameters
$SourceSiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$DestinationSiteURL = "https://crescent.sharepoint.com/sites/Branding"
#Connect to the source Site
$SourceConn = Connect-PnPOnline -URL $SourceSiteURL -Interactive -ReturnConnection
$Web = Get-PnPWeb -Connection $SourceConn
#Get all document libraries
$SourceLibraries = Get-PnPList -Includes RootFolder -Connection $SourceConn | Where {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $False}
#Connect to the destination site
$DestinationConn = Connect-PnPOnline -URL $DestinationSiteURL -Interactive -ReturnConnection
#Get All Lists in the Destination site
$DestinationLibraries = Get-PnPList -Connection $DestinationConn
ForEach($SourceLibrary in $SourceLibraries)
{
#Check if the library already exists in target
If(!($DestinationLibraries.Title -contains $SourceLibrary.Title))
{
#Create a document library
$NewLibrary = New-PnPList -Title $SourceLibrary.Title -Template DocumentLibrary -Connection $DestinationConn
Write-host "Document Library '$($SourceLibrary.Title)' created successfully!" -f Green
}
else
{
Write-host "Document Library '$($SourceLibrary.Title)' already exists!" -f Yellow
}
#Get the Destination Library
$DestinationLibrary = Get-PnPList $SourceLibrary.Title -Includes RootFolder -Connection $DestinationConn
$SourceLibraryURL = $SourceLibrary.RootFolder.ServerRelativeUrl
$DestinationLibraryURL = $DestinationLibrary.RootFolder.ServerRelativeUrl
#Calculate Site Relative URL of the Folder
If($Web.ServerRelativeURL -eq "/")
{
$FolderSiteRelativeUrl = $SourceLibrary.RootFolder.ServerRelativeUrl
}
Else
{
$FolderSiteRelativeUrl = $SourceLibrary.RootFolder.ServerRelativeUrl.Replace($Web.ServerRelativeURL,[string]::Empty)
}
#Get All Content from Source Library's Root Folder
$RootFolderItems = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeUrl -Connection $SourceConn | Where {($_.Name -ne "Forms") -and (-Not($_.Name.StartsWith("_")))}
#Copy Items to the Destination
$RootFolderItems | ForEach-Object {
$DestinationURL = $DestinationLibrary.RootFolder.ServerRelativeUrl
Copy-PnPFile -SourceUrl $_.ServerRelativeUrl -TargetUrl $DestinationLibraryURL -Force -OverwriteIfAlreadyExists
Write-host "`tCopied '$($_.ServerRelativeUrl)'" -f Green
}
Write-host "`tContent Copied from $SourceLibraryURL to $DestinationLibraryURL Successfully!" -f Cyan
}
上面的脚本与简单的文档库完美配合。但是,如果您的文档库添加了自定义元数据列怎么办?如果您想要复制文档库及其自定义设置怎么办?好吧,这是使用创建列表模板和列表实例方法在 SharePoint Online 中复制文档库的 PowerShell 脚本!
PowerShell 在 SharePoint Online 的网站集之间复制文档库
此 PowerShell 脚本将列表及其设置和元数据列复制到目标站点。
在运行此脚本之前,请确保您已在 SharePoint Online 中启用自定义脚本!否则,您将出现错误“访问被拒绝。您无权执行此操作或访问此资源。”如何在 SharePoint Online 中启用自定义脚本?
#Function to Copy All libraries from One Site to another
Function Copy-PnPAllLibraries
{
param (
[parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$SourceSiteURL,
[parameter(Mandatory=$true, ValueFromPipeline=$true)][string]$DestinationSiteURL
)
Try {
#Connect to the Source Site
$SourceConn = Connect-PnPOnline -URL $SourceSiteURL -Interactive -ReturnConnection
$SourceCtx = $SourceConn.Context
$SourceRootWeb = $SourceCtx.Site.RootWeb
$SourceCtx.Load($SourceRootWeb)
$SourceCtx.ExecuteQuery()
#Connect to the Destination Site
$DestinationConn = Connect-PnPOnline -URL $DestinationSiteURL -Interactive -ReturnConnection
$DestinationCtx = $DestinationConn.Context
$DestinationRootWeb = $DestinationCtx.Site.RootWeb
$DestinationCtx.Load($DestinationRootWeb)
$DestinationCtx.ExecuteQuery()
#Exclude certain libraries
$ExcludedLibraries = @("Style Library","Preservation Hold Library", "Site Pages", "Site Assets","Form Templates", "Site Collection Images","Site Collection Documents")
#Get Libraries from Source site - Skip hidden and certain libraries
$SourceLibraries = Get-PnPList -Includes RootFolder -Connection $SourceConn | Where {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $False -and $_.Title -notin $ExcludedLibraries}
#region PrepareTemplates
$SourceListTemplates = $SourceCtx.Site.GetCustomListTemplates($SourceRootWeb)
$SourceCtx.Load($SourceListTemplates)
$SourceCtx.ExecuteQuery()
$DestinationListTemplates = $DestinationCtx.Site.GetCustomListTemplates($DestinationRootWeb)
$DestinationCtx.Load($DestinationListTemplates)
$DestinationCtx.ExecuteQuery()
#Remove Document Library Templates from source and destination sites
ForEach($Library in $SourceLibraries)
{
$SourceListTemplate = $SourceListTemplates | Where {$_.Name -eq $Library.id.Guid}
$SourceListTemplateURL = $SourceRootWeb.ServerRelativeUrl+"/_catalogs/lt/"+$Library.id.Guid+".stp"
#Remove the List template if exists in source
If($SourceListTemplate)
{
$SourceListTemplateFile = Get-PnPFile -Url $SourceListTemplateURL -Connection $SourceConn
$SourceListTemplateFile.DeleteObject()
$SourceCtx.ExecuteQuery()
}
}
Write-host "Creating List Templates..." -f Yellow -NoNewline
#Create Templates
$SourceLibraries | ForEach-Object {
$_.SaveAsTemplate($_.id.Guid, $_.id.Guid, [string]::Empty, $False)
$SourceCtx.ExecuteQuery()
#Copy List Template from source to the destination site
$SourceListTemplateURL = $SourceRootWeb.ServerRelativeUrl+"/_catalogs/lt/"+$_.id.Guid+".stp"
Copy-PnPFile -SourceUrl $SourceListTemplateURL -TargetUrl ($DestinationRootWeb.ServerRelativeUrl+"/_catalogs/lt") -Force -OverwriteIfAlreadyExists
}
Write-host "Done!" -f Green
Start-Sleep 5
#Reload the List Templates in the Destination Site
$DestinationListTemplates = $DestinationCtx.Site.GetCustomListTemplates($DestinationRootWeb)
$DestinationCtx.Load($DestinationListTemplates)
$DestinationCtx.ExecuteQuery()
#endregion
#Iterate through each library in the source
ForEach($SourceLibrary in $SourceLibraries)
{
Write-host "Copying library:"$SourceLibrary.Title -f Magenta
#Get the Template
$DestinationListTemplate = $DestinationListTemplates | Where {$_.Name -eq $SourceLibrary.id.Guid}
#Create the destination library from the list template, if it doesn't exist
Write-host "Creating New Library in the Destination Site..." -f Yellow -NoNewline
If(!(Get-PnPList -Identity $SourceLibrary.Title -Connection $DestinationConn))
{
#Create the destination library
$ListCreation = New-Object Microsoft.SharePoint.Client.ListCreationInformation
$ListCreation.Title = $SourceLibrary.Title
$ListCreation.ListTemplate = $DestinationListTemplate
$DestinationList = $DestinationCtx.Web.Lists.Add($ListCreation)
$DestinationCtx.ExecuteQuery()
Write-host "Library '$($SourceLibrary.Title)' created successfully!" -f Green
}
Else
{
Write-host "Library '$($SourceLibrary.Title)' already exists!" -f Yellow
}
Write-host "Copying Files and Folders from the Source to Destination Site..." -f Yellow
$DestinationLibrary = Get-PnPList $SourceLibrary.Title -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 $SourceLibrary.Title -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
Write-host "`tCopied $($_.FileSystemObjectType) '$($_.FieldValues.FileRef)' Successfully!" -f Green
}
}
}
#Cleanup List Templates in source and destination sites
ForEach($Library in $SourceLibraries)
{
$SourceListTemplate = $SourceListTemplates | Where {$_.Name -eq $Library.id.Guid}
$SourceListTemplateURL = $SourceRootWeb.ServerRelativeUrl+"/_catalogs/lt/"+$Library.id.Guid+".stp"
#Remove the List template if exists in source
If($SourceListTemplate)
{
#Remove-PnPFile -ServerRelativeUrl $SourceListTemplateURL -Recycle -Force -Connection $SourceConn
$SourceListTemplateFile = Get-PnPFile -Url $SourceListTemplateURL -Connection $SourceConn
$SourceListTemplateFile.DeleteObject()
$SourceCtx.ExecuteQuery()
}
#Remove the List template if exists in target
$DestinationListTemplate = $DestinationListTemplates | Where {$_.Name -eq $Library.id.Guid}
$DestinationListTemplateURL = $DestinationRootWeb.ServerRelativeUrl+"/_catalogs/lt/"+$Library.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()
}
}
}
Catch {
write-host -f Red "Error:" $_.Exception.Message
}
}
#Parameters
$SourceSiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$DestinationSiteURL = "https://crescent.sharepoint.com/sites/HR"
#Call the function to copy libraries to another site
Copy-PnPAllLibraries -SourceSiteURL $SourceSiteURL -DestinationSiteURL $DestinationSiteURL
要将单个文档库复制到另一个网站集,请使用:如何使用 PowerShell 将文档库复制到 SharePoint Online 中的另一个网站?
猜你还喜欢
- 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) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[短剧合集] 2025年06月2日 精选+付费短剧推荐39部
[软件合集] 25年6月2日 精选软件18个
[软件合集] 25年6月1日 精选软件15个
[短剧合集] 2025年06月1日 精选+付费短剧推荐59部
[剧集] [央视][笑傲江湖][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