SharePoint Online: PowerShell kullanarak Belge Kitaplığındaki Tüm Dosyaları İndirin


Gereksinim: SharePoint Online belge kitaplığından tüm dosyaları indirmek için PowerShell.

SharePoint Online'da Belge Kitaplığı Nasıl İndirilir?

Belge kitaplıkları, SharePoint Online'ın temel bir bileşenidir ve kullanıcılara dosyaları depolamak, düzenlemek ve bunlara erişmek için merkezi bir konum sağlar. Ancak kullanıcıların yedekleme, geçiş veya başka amaçlar için belge kitaplığının tüm içeriğini indirmeleri gerekebileceği zamanlar olabilir. SharePoint Online'da bir belge kitaplığı indirmeniz gerekiyorsa bunu yapmanın birkaç farklı yolu vardır. Bu blog yazısında size web tarayıcısını, Dosya gezginini ve PowerShell'i kullanarak SharePoint Online kitaplığından tüm dosyaları nasıl indireceğinizi göstereceğim. Arşivleme veya başka bir amaç için bir kitaplıktaki tüm dosyaları toplamanız gerekiyorsa bu yararlı olabilir. Başlayalım!

SharePoint Online'dan aynı anda birden fazla dosya indirmek, Dosya Gezgini ile dosyaları kopyalamak kadar kolaydır (Kitaplığı Dosya Gezgini'nde açın, belge kitaplığı klasörünü yerel diskinize Kopyalayıp Yapıştırın). SharePoint Online belge kitaplığından tüm dosyaları web tarayıcısıyla indirmek için şu adımları izleyin:

  1. SharePoint belge kitaplığınıza gidin >> Tüm Dosyaları ve klasörleri seçin.
  2. Araç çubuğundan İndir düğmesine tıklayın. Bu size belge kitaplığındaki tüm dosya ve klasörleri içeren bir Zip dosyası sağlar. Benzer şekilde klasörleri de indirebilirsiniz.

Bu özelliğin yalnızca modern SharePoint Online kullanıcı arayüzünde kullanılabildiğini ve bu yöntemlerin herhangi bir belge meta verisi indirmediğini lütfen unutmayın. SharePoint'ten belge indirmek için en azından Salt Görüntüleme izin düzeyine ihtiyacınız vardır. Ayrıca, PDF dosyaları gibi belirli dosya türlerinin Bilgi Hakları Yönetimi (IRM) tarafından korunuyorsa belgeleri indiremeyebileceğinizi de belirtmekte fayda var.

Peki. PowerShell kullanarak SharePoint Online belge kitaplığından belgeleri indirelim.

SharePoint'te büyük miktarda dosyayı nasıl indiririm?
Yerel makinenize bir belge kitaplığı indirmek için OneDrive eşitleme istemcisini de kullanabilirsiniz! İndirmek istediğiniz belge kitaplığına veya klasöre gidin >> Araç çubuğundaki senkronizasyon düğmesine tıklayın ve sihirbazı takip edin!

SharePoint Online: PowerShell CSOM'u kullanarak Kitaplıktan Tüm Dosyaları İndirin

SharePoint Online'da belge kitaplığı indirmek için PowerShell'i kullanabiliriz. Peki neden PowerShell? Belki Explorer görünümü çalışmadığı için veya süreci otomatikleştirmek istediğiniz için! Belge kitaplığını indirmek için SharePoint Online PowerShell'i burada bulabilirsiniz:


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

Function Download-FilesFromLibrary()
{ 
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $LibraryName,
        [Parameter(Mandatory=$true)] [string] $TargetFolder
    )

    Try {
        #Setup Credentials to connect
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
     
        #Get all files from the Library
        $List = $Ctx.Web.Lists.GetByTitle($LibraryName)
        $Ctx.Load($List)
        $Ctx.ExecuteQuery()
        
        #Get Files from the Folder
        $Folder = $List.RootFolder
        $FilesColl = $Folder.Files
        $Ctx.Load($FilesColl)
        $Ctx.ExecuteQuery()

        Foreach($File in $FilesColl)
        {
            $TargetFile = $TargetFolder+$File.Name
            #Download the file
            $FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
            $WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
            $FileInfo.Stream.CopyTo($WriteStream)
            $WriteStream.Close()
        }
        Write-host -f Green "All Files from Library '$LibraryName' Downloaded to Folder '$TargetFolder' Successfully!" $_.Exception.Message
  }
    Catch {
        write-host -f Red "Error Downloading Files from Library!" $_.Exception.Message
    }
}

#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/sales/"
$LibraryName="Documents"
$TargetFolder="C:\Documents\"

#Call the function to download file 
Download-FilesFromLibrary -SiteURL $SiteURL -LibraryName $LibraryName -TargetFolder $TargetFolder

Bu PowerShell betiği kitaplıktaki tüm dosyaları indirir. Kitaplığınızda Alt Klasörler varsa ne olur? Peki, SharePoint Online'dan kitaplık indirmek için PowerShell'i değiştirelim.

PowerShell kullanarak Kitaplıktan Alt Klasörler dahil Tüm Dosyaları İndirin:

Tüm alt klasörlerdeki tüm dosyalar dahil olmak üzere PowerShell'i kullanarak SharePoint Online belge kitaplığından dosyaları indirelim.


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

Function Download-AllFilesFromLibrary()
{ 
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.Folder] $SourceFolder,
        [Parameter(Mandatory=$true)] [string] $TargetFolder
    )
    Try {
        
        #Create Local Folder, if it doesn't exist
        $FolderName = ($SourceFolder.ServerRelativeURL) -replace "/","\"
        $LocalFolder = $TargetFolder + $FolderName
        If (!(Test-Path -Path $LocalFolder)) {
                New-Item -ItemType Directory -Path $LocalFolder | Out-Null
        }
        
        #Get all Files from the folder
        $FilesColl = $SourceFolder.Files
        $Ctx.Load($FilesColl)
        $Ctx.ExecuteQuery()

        #Iterate through each file and download
        Foreach($File in $FilesColl)
        {
            $TargetFile = $LocalFolder+"\"+$File.Name
            #Download the file
            $FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
            $WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
            $FileInfo.Stream.CopyTo($WriteStream)
            $WriteStream.Close()
            write-host -f Green "Downloaded File:"$TargetFile 
        }
        
        #Process Sub Folders
        $SubFolders = $SourceFolder.Folders
        $Ctx.Load($SubFolders)
        $Ctx.ExecuteQuery()
        Foreach($Folder in $SubFolders)
        {
            If($Folder.Name -ne "Forms")
            {
                #Call the function recursively
                Download-AllFilesFromLibrary -SiteURL $SiteURL -SourceFolder $Folder -TargetFolder $TargetFolder
            }
        }
  }
    Catch {
        write-host -f Red "Error Downloading Files from Library!" $_.Exception.Message
    }
}

#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/sales/"
$LibraryName="Documents"
$TargetFolder="C:\Docs"

#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
     
#Get the Library
$List = $Ctx.Web.Lists.GetByTitle($LibraryName)
$Ctx.Load($List)
$Ctx.Load($List.RootFolder)
$Ctx.ExecuteQuery()

#Call the function: sharepoint online download multiple files powershell
Download-AllFilesFromLibrary -SiteURL $SiteURL -SourceFolder $List.RootFolder -TargetFolder $TargetFolder

PnP PowerShell, SharePoint Online'dan Belge Kitaplığı İndirmek İçin

Bu PowerShell betiği, tüm dosya ve klasörleri belge kitaplığından yerel dizine indirir.


#Function to Download All Files from a SharePoint Online Folder - Recursively  
Function Download-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder, $DestinationFolder)
{  
    #Get the Folder's Site Relative URL
    $FolderURL = $Folder.ServerRelativeUrl.Substring($Folder.Context.Web.ServerRelativeUrl.Length)
    $LocalFolder = $DestinationFolder + ($FolderURL -replace "/","\")
    #Create Local Folder, if it doesn't exist
    If (!(Test-Path -Path $LocalFolder)) {
            New-Item -ItemType Directory -Path $LocalFolder | Out-Null
            Write-host -f Yellow "Created a New Folder '$LocalFolder'"
    }
          
    #Get all Files from the folder
    $FilesColl = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType File 
    #Iterate through each file and download
    Foreach($File in $FilesColl)
    {
        Get-PnPFile -ServerRelativeUrl $File.ServerRelativeUrl -Path $LocalFolder -FileName $File.Name -AsFile -force
        Write-host -f Green "`tDownloaded File from '$($File.ServerRelativeUrl)'"
    }
    #Get Subfolders of the Folder and call the function recursively
    $SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType Folder
    Foreach ($Folder in $SubFolders | Where {$_.Name -ne "Forms"})
    {
        Download-SPOFolder $Folder $DestinationFolder
    }
}  

#Set Parameters
$SiteURL = "https://crescent.sharepoint.com"
$LibraryURL = "/Shared Documents" #Site Relative URL
$DownloadPath ="C:\Temp\Docs\"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)  

#Get The Root folder of the Library
$Folder = Get-PnPFolder -Url $LibraryURL

#Call the function to download the document library
Download-SPOFolder $Folder $DownloadPath

Daha Büyük Bir Belge Kitaplığı İndirmek İçin PnP PowerShell

Get-PnPFolderItem cmdlet'i bugün itibariyle 5000'den fazla öğe içeren kitaplıkları işleyemediğinden, "Liste görüntüleme eşiğini aştığı için girişimde bulunulan işlem yasaklanmıştır." hata - işte daha büyük bir belge kitaplığından tüm dosya ve klasörleri indirmenin alternatif yaklaşımı.


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Branding"
$DownloadPath ="C:\Temp\NewDocs"

#Connect to SharePoint Online
Connect-PnPOnline $SiteURL -Interactive
$Web = Get-PnPWeb

#Get the list
$List = Get-PnPList -Identity $ListName

#Get all Items from the Library - with progress bar
$global:counter = 0
$ListItems = Get-PnPListItem -List $ListName -PageSize 500 -Fields ID -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete `
            ($global:Counter / ($List.ItemCount) * 100) -Activity "Getting Items from List:" -Status "Processing Items $global:Counter to $($List.ItemCount)";} 
Write-Progress -Activity "Completed Retrieving Folders from List $ListName" -Completed

#Get all Subfolders of the library
$SubFolders = $ListItems | Where {$_.FileSystemObjectType -eq "Folder" -and $_.FieldValues.FileLeafRef -ne "Forms"}
$SubFolders | ForEach-Object {
    #Ensure All Folders in the Local Path
    $LocalFolder = $DownloadPath + ($_.FieldValues.FileRef.Substring($Web.ServerRelativeUrl.Length)) -replace "/","\"
    #Create Local Folder, if it doesn't exist
    If (!(Test-Path -Path $LocalFolder)) {
            New-Item -ItemType Directory -Path $LocalFolder | Out-Null
    }
    Write-host -f Yellow "Ensured Folder '$LocalFolder'"
}

#Get all Files from the folder
$FilesColl =  $ListItems | Where {$_.FileSystemObjectType -eq "File"}

#Iterate through each file and download
$FilesColl | ForEach-Object {
    $FileDownloadPath = ($DownloadPath + ($_.FieldValues.FileRef.Substring($Web.ServerRelativeUrl.Length)) -replace "/","\").Replace($_.FieldValues.FileLeafRef,'')
    Get-PnPFile -ServerRelativeUrl $_.FieldValues.FileRef -Path $FileDownloadPath -FileName $_.FieldValues.FileLeafRef -AsFile -force
    Write-host -f Green "Downloaded File from '$($_.FieldValues.FileRef)'"
}

SharePoint Online'dan belge kitaplığı indirmenin Alternatif Yöntemi

Dosyaları SharePoint çevrimiçinden yerel bir klasöre kopyalamak için bu PowerShell betiğini kullanın:


#Set Parameters
$TenantSiteURL = "https://crescent.sharepoint.com"
$SiteRelativeURL = "/sites/marketing"
$LibraryName = "Project Documents"
$DownloadPath ="C:\Temp\Docs"

#Connect to PnP Online as Virtual Drive "SPO:\"
Connect-PnPOnline -Url $TenantSiteURL -CreateDrive -Credentials (Get-Credential)

#Change the Path and navigate to the source site
Set-Location -Path SPO:\$SiteRelativeURL

#Download Document Library to Local Drive
Copy-PnpItemProxy -Recurse -Force $LibraryName $DownloadPath

Çözüm

Sonuç olarak, SharePoint Online'dan belge kitaplığı indirmek, çeşitli yöntemler kullanılarak gerçekleştirilebilecek basit bir işlemdir. İster deneyimli bir SharePoint profesyoneli ister acemi bir kullanıcı olun, yerel SharePoint web tarayıcısı arayüzünü, Explorer görünümünü veya bir PowerShell betiğini seçebilirsiniz. Bu kılavuzda özetlenen adımları izleyerek SharePoint Online'dan kolayca belge kitaplığı indirebilirsiniz. Bu, önemli dosyalarınızın yedeklenmesini ve ihtiyaç duyduğunuzda erişilebilir olmasını sağlayacaktır.

Bir sitedeki tüm kitaplıklardaki tüm dosyaları indirebilir miyim? Elbette, tüm belge kitaplıklarını yineleyebilir ve işlevi çağırabilir veya şu yöntemi kullanabilirsiniz: PowerShell kullanarak SharePoint Çevrimiçi Sitesinden Tüm Dosyalar Nasıl İndirilir?

Sıkça Sorulan Sorular:

Tüm Ekleri SharePoint Online listesinden nasıl indirebilirim?

SharePoint Listesinden ekleri indirmek için “Harita Ağ Sürücüsü” veya “Dosya Gezgini” özelliklerini kullanın. SharePoint Online listelerindeki tüm ekleri indirmek için de PowerShell'i kullanabilirsiniz.
Daha fazla bilgi: SharePoint Online listesinden ekleri indirin

SharePoint Belge kitaplığında indirme nasıl engellenir?

Kullanıcılara, SharePoint Online belge kitaplığından indirme seçeneğini engellemeleri için "Kısıtlı Görünüm" izinleri verin.
Daha fazla bilgi: SharePoint Online'daki Belgeler için İndirme Seçeneğinin Engellenmesi

Bir kitaplığı bir SharePoint sitesinden diğerine nasıl kopyalarım?

Tüm dosyaları bir belge kitaplığından diğerine kopyalamak için SharePoint Online'daki “Kopyala” özelliğini kullanabilirsiniz. PowerShell, bir kitaplığı SharePoint Online siteleri arasında kopyalamak için de kullanılabilir.
Daha fazla bilgi: SharePoint Online belge kitaplığını başka bir siteye kopyalama

SharePoint Online'da bir belge kitaplığını nasıl kopyalarım?

Kaynak belge kitaplığını şablon olarak kaydedebilir ve belge kitaplığının bir kopyasını oluşturmak için kaydedilen şablondan yeni bir belge kitaplığı oluşturabilirsiniz. Daha sonra gerekirse tüm dosya ve klasörleri kaynaktan hedef kitaplığa kopyalayın. PowerShell betikleri bu görevleri otomatikleştirmenize yardımcı olabilir.
Daha fazla bilgi: SharePoint Online Belge kitaplığını kopyalama

SharePoint Online'dan nasıl klasör indiririm?

SharePoint Online'dan bir klasör indirmek için indirmek istediğiniz klasöre gidin ve araç çubuğundaki “İndir” düğmesine tıklayın. Bu, klasörün tamamını ve içeriğini sıkıştırılmış bir ZIP dosyası olarak indirecektir. Daha sonra dosyaları yerel bilgisayarınızdaki ZIP dosyasından çıkarabilirsiniz. PowerShell ile SharePoint Online'dan Klasör İndirmek de mümkün! SharePoint Online'dan Klasör Nasıl İndirilir?

İlgili makaleler