Tìm kiếm trang web

SharePoint Online: Di chuyển thư mục có thư mục con và tệp bằng PowerShell


Yêu cầu: Di chuyển thư mục cùng với các thư mục con và tệp từ ổ đĩa cục bộ sang SharePoint Online bằng PowerShell.

PowerShell để sao chép Thư mục có các Thư mục con và Tệp vào SharePoint Online:

Di chuyển một thư mục (và tất cả các thư mục con và tệp của nó) từ máy tính cục bộ của bạn sang SharePoint Online có thể là một nhiệm vụ khó khăn. May mắn thay, PowerShell có thể giúp thực hiện quá trình này nhanh chóng và dễ dàng. Bài viết này sẽ hướng dẫn bạn cách sao chép thư mục chứa các thư mục con và tệp vào SharePoint Online bằng PowerShell.

Đây là PnP PowerShell để sao chép tất cả các tệp và thư mục con từ một thư mục nhất định từ ổ đĩa cục bộ (hoặc ổ đĩa mạng) sang 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"

Tập lệnh này sao chép nội dung của một thư mục vào thư viện tài liệu SharePoint Online. Nó ghi đè bất kỳ tệp hiện có nào trong thư viện SharePoint Online đích và tạo một thư mục nếu nó không tồn tại trên trang đích. Chúng tôi cũng có thể sử dụng tập lệnh này để di chuyển các tệp và thư mục từ chia sẻ tệp mạng sang thư viện tài liệu SharePoint Online!

Tóm lại, việc sử dụng PowerShell để di chuyển thư mục cục bộ cùng với các thư mục con và tệp sang SharePoint Online cung cấp giải pháp mạnh mẽ và hiệu quả để truyền dữ liệu từ hệ thống cục bộ sang đám mây. Phương pháp này không chỉ bảo toàn cấu trúc của thư mục và nội dung của nó mà còn cho phép tự động hóa quá trình di chuyển, giúp các tổ chức di chuyển dữ liệu của họ lên đám mây một cách nhanh chóng và dễ dàng.

Bài viết liên quan