SharePoint Online: PowerShell Kullanarak Bir Klasördeki Tüm Dosyaları ve Alt Klasörleri Yinelemeli Olarak Silme


Gereksinim: SharePoint Online belge kitaplığındaki bir Klasörü, tüm dosyalarını ve Alt Klasörlerini yinelemeli olarak silerek boşaltın.

SharePoint Online'dan alt klasörler ve dosyalar içeren bir klasör nasıl silinir?

SharePoint Online'daki dosyaların ve alt klasörlerin silinmesi, SharePoint kullanıcı arayüzü aracılığıyla yapılabilir. SharePoint Online'daki bir klasördeki tüm dosyaları ve alt klasörleri silmek için şu adımları izleyin:

  1. SharePoint Online sitenizi tarayıcıda açın >> Silmek istediğiniz klasöre gidin.
  2. Klasördeki tüm dosyaları ve alt klasörleri seçin.
  3. Komut çubuğundaki "Sil" düğmesini tıklayın veya sağ tıklayıp "Sil"i seçin.
  4. Onay iletişim kutusunda "Sil" seçeneğine tıklayarak silme işlemini onaylayın.

Dosyaları ve alt klasörleri silmek oldukça basit bir işlemdir ancak silinecek birden fazla dosyanız ve alt klasörünüz varsa bu işlem zaman alıcı hale gelebilir. Bu görevi otomatikleştirmek için PowerShell'i kullanabilirsiniz. PowerShell'i tekrar tekrar kullanarak SharePoint Online'daki bir klasördeki tüm dosyaları ve alt klasörleri nasıl sileceğinizi keşfedelim.

SharePoint Çevrimiçi Klasöründeki Tüm Dosyaları ve Alt Klasörleri Silmek için PowerShell

Geçişe hazırlanırken bazı eski verileri temizlemem gerekiyordu; bu nedenle, bir SharePoint Online sitesinden dosya ve klasörleri yinelemeli olarak silmem gerekiyordu. SharePoint Online'da dosya ve klasörleri yinelemeli olarak silmek için PowerShell'i kullanabiliriz. Bu, sitenizi hızlı bir şekilde temizlemenin veya büyük miktarda içeriği silmenin harika bir yolu olabilir.

SharePoint Online'dan alt klasörleri ve dosyaları olan bir klasörü silelim:


#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 to Delete all files and Sub-folders of a given Folder
Function Empty-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    Try {
        #Get All Files from the Folder
        $Ctx = $Folder.Context
        $Files = $Folder.Files
        $Ctx.Load($Files)
        $Ctx.ExecuteQuery()
 
        #Iterate through each File in the Root folder
        Foreach($File in $Files)
        {
            #Delete the file
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).Recycle() | Out-Null
            Write-host -f Green "Deleted File '$($File.Name)' from '$($File.ServerRelativeURL)'"
        }
        $Ctx.ExecuteQuery()
 
        #Process all Sub Folders of the given folder
        $SubFolders = $Folder.Folders
        $Ctx.Load($SubFolders)
        $Ctx.ExecuteQuery()
        
        #delete all subfolders
        Foreach($Folder in $SubFolders)
        {
            #Exclude "Forms" and Hidden folders
            If( ($Folder.Name -ne "Forms") -and (-Not($Folder.Name.StartsWith("_"))))
            {
                #Call the function recursively to empty the folder
                Empty-SPOFolder -Folder $Folder

                #Delete the folder
                $Ctx.Web.GetFolderById($Folder.UniqueId).Recycle() | Out-Null
                $Ctx.ExecuteQuery()
                Write-host  -f Green "Deleted Folder:"$Folder.ServerRelativeUrl
            }
        }
    }
    Catch {
    write-host -f Red "Error:" $_.Exception.Message
    }
}

#Variables
$SiteURL = "https://crescent.sharepoint.com/Sites/Marketing"
$ServerRelativeUrl= "/Sites/Marketing/Project Documents/2018"

Try {
    #Get Credentials to connect
    $Cred= Get-Credential

    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
  
    #Get the web from URL
    $Web = $Ctx.web
    $Ctx.Load($Web)
    $Ctx.executeQuery()

    #Get the Folder object by Server Relative URL
    $Folder = $Web.GetFolderByServerRelativeUrl($ServerRelativeUrl)
    $Ctx.Load($Folder)
    $Ctx.ExecuteQuery() 

    #Call the function to empty Folder
    Empty-SPOFolder $Folder

    #Delete the given Folder itself
    Write-host  -f Green "Deleting Folder:"$Folder.ServerRelativeUrl
    $Folder.Recycle() | Out-Null
    $Ctx.ExecuteQuery() 
}
Catch {
    write-host -f Red "Error:" $_.Exception.Message
} 

Bu PowerShell betiği, bir klasörün tüm dosyalarını, alt klasörlerini siler ve ardından verilen klasörü de siler.

SharePoint Online'da Bir Klasörü Boşaltmak için PnP PowerShell:

PnP PowerShell ile tüm dosya ve klasörleri tek tek manuel olarak silmek yerine yinelemeli olarak kolayca silebiliriz. SharePoint Online belge kitaplığında belirli bir klasörün tüm dosyalarını ve alt klasörlerini temizlemek için PnP PowerShell betiği aşağıda verilmiştir:


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$FolderSiteRelativeURL = "Shared Documents/2018"

#Connect to the Site
Connect-PnPOnline -URL $SiteURL -Credentials (Get-Credential)

#Get the web & folder
$Web = Get-PnPWeb
$Folder = Get-PnPFolder -Url $FolderSiteRelativeURL

#Function to delete all Files and sub-folders from a Folder
Function Empty-PnPFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    #Get the site relative path of the Folder
    If($Web.ServerRelativeURL -eq "/")
    {
        $FolderSiteRelativeURL = $Folder.ServerRelativeUrl
    }
    Else
    {        
        $FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Replace($Web.ServerRelativeURL,[string]::Empty)
    }

    #Delete all files in the Folder
    $Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType File
    ForEach ($File in $Files)
    {
        #Delete File
        Remove-PnPFile -ServerRelativeUrl $File.ServerRelativeURL -Force -Recycle
        Write-Host -f Green ("Deleted File: '{0}' at '{1}'" -f $File.Name, $File.ServerRelativeURL)        
    }

    #Process all Sub-Folders
    $SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder
    Foreach($SubFolder in $SubFolders)
    {
        #Exclude "Forms" and Hidden folders
        If(($SubFolder.Name -ne "Forms") -and (-Not($SubFolder.Name.StartsWith("_"))))
        {
            #Call the function recursively
            Empty-PnPFolder -Folder $SubFolder

            #Delete the folder
            $ParentFolderURL = $FolderSiteRelativeURL.TrimStart("/")
            Remove-PnPFolder -Name $SubFolder.Name -Folder $ParentFolderURL -Force -Recycle
            Write-Host -f Green ("Deleted Folder: '{0}' at '{1}'" -f $SubFolder.Name, $SubFolder.ServerRelativeURL)
        }
    }
}

#Call the function to empty folder
Empty-PnPFolder -Folder $Folder

SharePoint Online belge kitaplığındaki bir klasörü silmek için şunu kullanın: SharePoint Online: PowerShell Kullanarak Bir Klasör Nasıl Silinir?

SharePoint Online'da dosya içeren bir klasörü silme

Saklama ilkesi nedeniyle SharePoint Online'daki bir klasörü silemiyor musunuz? Bir klasördeki tüm dosyaları ve alt klasörleri nasıl kaldıracağınız aşağıda açıklanmıştır:

  1. Connect-PnPOnline cmdlet'ini kullanarak SharePoint Online'a bağlanın.
  2. Get-PnPListItem cmdlet'ini kullanarak klasörün içeriğini alın.
  3. Remove-PnPListItem cmdlet'ini kullanarak klasördeki tüm dosyaları ve alt klasörleri silin.

#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName ="Branding"
$FolderServerRelativeURL = "/sites/Marketing/Branding/2019"

Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive
     
    #Get All Items from Folder in Batch
    $ListItems = Get-PnPListItem -List $ListName -FolderServerRelativeUrl $FolderServerRelativeURL -PageSize 2000 | Sort-Object ID -Descending
 
    #Powershell to delete all files from a folder
    ForEach ($Item in $ListItems)
    {
        Remove-PnPListItem -List $ListName -Identity $Item.Id -Recycle -Force
        Write-host "Removed File:"$Item.FieldValues.FileRef
    }
}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Yukarıdaki kod, daha büyük listelerde eşiğin aşılması sorununa neden olabilir. Olası liste görünümü eşiğinin aşılması sorununu önlemek için büyük bir klasörü, dosyaları ve alt klasörleriyle birlikte toplu olarak silmeye ne dersiniz? SharePoint Online'da bir klasörü boşaltmak için bu betiği kullanın:


#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName ="Branding"
$FolderServerRelativeURL = "/sites/Marketing/Shared Documents/2019/*"
 
Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -UseWebLogin
       
    #Get All Items from Folder in Batch
    $ListItems = Get-PnPListItem -List $ListName -PageSize 2000 | Sort-Object ID -Descending
  
    #Get List Items from the folder
    $ItemsFromFolder = $ListItems | Where {$_.FieldValues.FileDirRef -like $FolderServerRelativeURL }
    $ItemCount = $ItemsFromFolder.count
    Write-host "Total Number of Items Found in the Folder:"$ItemCount
   
    $Counter = 1
    #Powershell to delete all files from a folder
    ForEach ($Item in $ItemsFromFolder)
    {
        Remove-PnPListItem -List $ListName -Identity $Item.Id -Recycle -Force
        Write-host "Removed Item ($Counter of $ItemCount):"$Item.FieldValues.FileRef
        $Counter++
    }
}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

SharePoint Online'da bir CSV dosyasından birden çok klasörü silmek için şunu kullanın: PowerShell kullanarak bir CSV'den SharePoint Online'daki Klasörleri Toplu Silme?

Çözüm:

Sonuç olarak, SharePoint Online'daki bir klasördeki tüm dosyaları ve alt klasörleri silmek için PowerShell'i kullanmak, SharePoint ortamınızı temizleme görevini otomatikleştirmek için güçlü ve etkili bir yöntemdir. PowerShell'in özelliklerinden yararlanarak zamandan tasarruf edebilir ve SharePoint ortamınızın düzenli ve akıcı kalmasını sağlayabilirsiniz. Ancak bu yöntemi dikkatli bir şekilde ve ancak silinecek dosya ve klasörlere ihtiyaç duyulmadığını doğruladıktan sonra kullanmak önemlidir. SharePoint Online'da silinen dosyalar ve klasörler Geri Dönüşüm Kutusu'na taşınır ve belirli bir süre içinde geri yüklenebilir; bu nedenle bu komutları sorumlu bir şekilde kullandığınızdan emin olun.

İlgili makaleler