当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 迁移包含子文件夹和文件的文件夹

作者:精品下载站 日期:2024-12-14 21:17:27 浏览:13 分类:玩电脑

SharePoint Online:使用 PowerShell 迁移包含子文件夹和文件的文件夹


要求: 使用 PowerShell 将文件夹及其子文件夹和文件从本地磁盘迁移到 SharePoint Online。

[玩转系统] SharePoint Online:使用 PowerShell 迁移包含子文件夹和文件的文件夹

PowerShell 将文件夹及其子文件夹和文件复制到 SharePoint Online:

将文件夹(及其所有子文件夹和文件)从本地计算机迁移到 SharePoint Online 可能是一项艰巨的任务。幸运的是,PowerShell 可以帮助您快速轻松地完成此过程。本文将向您展示如何使用 PowerShell 将包含子文件夹和文件的文件夹复制到 SharePoint Online。

以下是 PnP PowerShell,用于将给定文件夹中的所有文件和子文件夹从本地驱动器(或网络驱动器)复制到 SharePoint Online:


#Function to Copy Multiple Files with Folder structure to SharePoint Online Document Library
Function Migrate-PnPFolderToSPO()
{
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $SourceFolderPath,
        [Parameter(Mandatory=$true)] [string] $LibraryName,
        [Parameter(Mandatory=$true)] [string] $LogFile
    )
 
    Try {
        Add-content $Logfile -value "`n---------------------- File Upload Script Started: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')-------------------"
     
        #Connect to PnP Online
        Connect-PnPOnline -Url $SiteURL -Interactive  

        #Get the Target Folder to Upload
        $Web = Get-PnPWeb
        $List = Get-PnPList $LibraryName -Includes RootFolder
        $TargetFolder = $List.RootFolder
        $TargetFolderSiteRelativeURL = $TargetFolder.ServerRelativeURL.Replace($Web.ServerRelativeUrl,[string]::Empty)
 
        #Get All Items from the Source
        $Source = Get-ChildItem -Path $SourceFolderPath -Recurse
        $SourceItems = $Source | Select FullName, PSIsContainer, @{Label='TargetItemURL';Expression={$_.FullName.Replace($SourceFolderPath,$TargetFolderSiteRelativeURL).Replace("\","/")}}
        Add-content $Logfile -value "Number of Items Found in the Source: $($SourceItems.Count)"
 
        #Upload Source Items from Fileshare to Target SharePoint Online document library
        $Counter = 1
        $SourceItems | ForEach-Object {
                #Calculate Target Folder URL
                $TargetFolderURL = (Split-Path $_.TargetItemURL -Parent).Replace("\","/")
                $ItemName = Split-Path $_.FullName -leaf
                   
                #Replace Invalid Characters
                $ItemName = [RegEx]::Replace($ItemName, "[{0}]" -f ([RegEx]::Escape([String]'\*:<>?/\|')), '_')

                #Display Progress bar
                $Status  = "uploading '" + $ItemName + "' to " + $TargetFolderURL +" ($($Counter) of $($SourceItems.Count))"
                Write-Progress -Activity "Uploading ..." -Status $Status -PercentComplete (($Counter / $SourceItems.Count) * 100)
 
                If($_.PSIsContainer)
                {
                    #Ensure Folder
                    $Folder  = Resolve-PnPFolder -SiteRelativePath ($TargetFolderURL+"/"+$ItemName)
                    Write-host "Ensured Folder '$($ItemName)' to Folder $TargetFolderURL"
                    Add-content $Logfile -value "Ensured Folder '$($ItemName)' to Folder $TargetFolderURL"
                }
                Else
                {
                        #Upload File
                        If($TargetFolderURL.StartsWith("/")) {$TargetFolderURL = $TargetFolderURL.Remove(0,1) }
                        $File  = Add-PnPFile -Path $_.FullName -Folder $TargetFolderURL
                        Write-host "Uploaded File '$($_.FullName)' to Folder $TargetFolderURL"
                        Add-content $Logfile -value "Uploaded File '$($_.FullName)' to Folder $TargetFolderURL"                        
                }
                $Counter++
        }
}
    Catch {
        Write-host -f Red "Error:" $_.Exception.Message
        Add-content $Logfile -value "Error:$($_.Exception.Message)"
    }
    Finally {
       Add-content $Logfile -value "---------------------- File upload Script Completed: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')-----------------"
    }
}
 
#Call the Function to Upload a Folder to SharePoint Online
Migrate-PnPFolderToSPO -SiteURL "https://crescent.sharepoint.com/sites/marketing" -SourceFolderPath "C:\Documents" -LibraryName "Migration" -LogFile "C:\Temp\Migration-LOG.log"

此脚本将文件夹的内容复制到 SharePoint Online 文档库。它会覆盖目标 SharePoint Online 库中的任何现有文件,并创建一个文件夹(如果目标网站上不存在该文件夹)。我们还可以使用此脚本将文件和文件夹从网络文件共享迁移到 SharePoint Online 文档库!

总之,使用 PowerShell 将包含子文件夹和文件的本地文件夹迁移到 SharePoint Online 为将数据从本地系统传输到云提供了强大且高效的解决方案。此方法不仅保留文件夹及其内容的结构,而且还允许迁移过程自动化,使组织能够快速轻松地将数据移动到云。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯