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:
- SharePoint Online sitenizi tarayıcıda açın >> Silmek istediğiniz klasöre gidin.
- Klasördeki tüm dosyaları ve alt klasörleri seçin.
- Komut çubuğundaki "Sil" düğmesini tıklayın veya sağ tıklayıp "Sil"i seçin.
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:
- Connect-PnPOnline cmdlet'ini kullanarak SharePoint Online'a bağlanın.
- Get-PnPListItem cmdlet'ini kullanarak klasörün içeriğini alın.
- 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.

