SharePoint Online: PowerShell kullanarak Boş Klasörleri Silme
Gereksinim: PowerShell'i kullanarak SharePoint Çevrimiçi Belge Kitaplığındaki Boş Klasörleri silin.
SharePoint Online sitenizde çok sayıda boş klasör bulunmasıyla ilgili bir sorunla mı karşılaşıyorsunuz? Ve eğer siz de benim gibiyseniz muhtemelen bunu yapmanın daha kolay bir yolu olup olmadığını merak etmişsinizdir. Çünkü web tarayıcısını kullanarak her klasöre giderek bunları tanımlamak ve silmek zahmetli olacaktır. Ancak PowerShell bunlardan hızlı ve kolay bir şekilde kurtulmanın bir yolunu sunuyor. Bu blog yazımızda PowerShell kullanarak SharePoint Online'da boş klasörlerin nasıl silineceğine bir göz atacağız.
SharePoint Online'da Boş Klasörler Nasıl Bulunur?
Bir klasörün içinde herhangi bir dosya veya alt klasör yoksa boş kabul edilir. Öyleyse, SharePoint Online'da boş klasörleri web kullanıcı arayüzünden Öğe Alt Sayısı (Klasörün kök düzeyindeki öğe sayısı, tüm öğelerin toplamı DEĞİL) kullanarak nasıl bulabileceğimizi burada bulabilirsiniz. tüm alt klasörlerde.) ve Klasör Alt Sayısı (Klasörün kök düzeyindeki alt klasörlerin sayısı).
- Belge kitaplığına gidin >> Görünümler açılır menüsünden "Geçerli Görünümü Düzenle"ye tıklayın.
“Klasör Çocuk Sayısı” ve “Öğe Çocuk Sayısı” sütunlarını seçin ve Tamam'a tıklayın.
Artık görünüm, her klasörün üst düzeyindeki öğe sayısını ve klasör sayısını gösterir.
SharePoint Online'da Boş Klasörleri Bulmak için PowerShell:
Bu komut dosyası, verilen belge kitaplığındaki her klasörü tarar ve dosya ve alt klasör sayısının '0'a eşit olup olmadığını kontrol eder.
#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"
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName="Documents"
#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 List
$List = $Ctx.Web.lists.GetByTitle($ListName)
#Define the CAML Query to get folders
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "@
<View Scope='RecursiveAll'>
<Query>
<Where>
<And>
<And>
<Eq><FieldRef Name='ContentType' /><Value Type='Text'>Folder</Value></Eq>
<Eq><FieldRef Name='ItemChildCount' /> <Value Type='Counter'>0</Value></Eq>
</And>
<Eq><FieldRef Name='FolderChildCount' /> <Value Type='Counter'>0</Value></Eq>
</And>
</Where>
</Query>
</View>"
#Get All List Items matching the query
$Folders = $List.GetItems($Query)
$Ctx.Load($Folders)
$Ctx.ExecuteQuery()
Write-host "Total Number of Empty Folders:"$Folders.count
#Loop through each List Item
ForEach($Folder in $Folders)
{
Write-host $Folder.FieldValues.FileRef
}
Bu komut dosyası, verilen kitaplığın tüm seviyelerindeki tüm boş klasörleri listeler. Ancak boş bir klasörü sildiğimizde onun ana klasörü de boşalır. (ana klasörde yalnızca bir boş klasör olması ve içinde başka dosya olmaması koşuluyla!).
SharePoint Online: Boş Klasörleri Kaldırmak için PowerShell
Bu PowerShell betiği, belirli bir SharePoint Online belge kitaplığındaki tüm boş klasörleri siler.
#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 Delete-SPOEmptyFolders([Microsoft.SharePoint.Client.Folder]$Folder)
{
#Get All Sub-Folders from the given Folder
$SubFolders = $Folder.Folders
$Ctx.Load($SubFolders)
$Ctx.ExecuteQuery()
#Process Each Sub-Folder Recursively
ForEach($SubFolder in $SubFolders)
{
#Exclude "Forms" and Hidden folders
If(($SubFolder.Name -ne "Forms") -and (-Not($SubFolder.Name.StartsWith("_"))) -and $SubFolder.Name -ne $RootFolder.Name)
{
#Call the function recursively
Delete-SPOEmptyFolders $SubFolder
}
}
#Get All Files and Sub-Folders from the Sub-folder
$SubFolders = $Folder.Folders
$Files = $Folder.Files
$Ctx.Load($SubFolders)
$Ctx.Load($Files)
$Ctx.ExecuteQuery()
Write-host -f Yellow "Checking if the folder is Empty:" $Folder.serverRelativeURL
#Delete Empty Folders
If($SubFolders.Count -eq 0 -and $Files.Count -eq 0)
{
#Delete the folder
$EmptyFolder=$Ctx.web.GetFolderByServerRelativeUrl($Folder.ServerRelativeUrl)
$EmptyFolder.Recycle() | Out-Null
$Ctx.ExecuteQuery()
Write-host -f Green "`tDeleted Empty Folder:"$Folder.ServerRelativeUrl
}
}
#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$LibraryName = "Migration Documents"
#Get Credentials to connect
$Cred = Get-Credential
Try {
#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 Root Folder of the Library
$List = $Ctx.web.Lists.GetByTitle($LibraryName)
$RootFolder = $List.RootFolder
$Ctx.Load($RootFolder)
$Ctx.ExecuteQuery()
#Call the function to delete empty folders from a document library
Delete-SPOEmptyFolders $RootFolder
}
catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
SharePoint Online'daki Boş Klasörleri Silmek için PnP PowerShell:
Yukarıdaki betiği PnP PowerShell ile daha da basitleştirelim:
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$DocumentLibraryName = "Documents"
#Connect to the Site
Connect-PnPOnline -URL $SiteURL -Credentials (Get-Credential)
#Get the web & folder
$Web = Get-PnPWeb
$List = Get-PnPList -Identity $DocumentLibraryName -Includes RootFolder
Function Delete-PnPEmptyFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
$FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length+1)
#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
Delete-PnPEmptyFolder -Folder $SubFolder
}
}
#Get all files & Reload Sub-folders from the given Folder
$Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType File
$SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder
If ($Files.Count -eq 0 -and $SubFolders.Count -eq 0)
{
#Delete the folder
$ParentFolder = Get-PnPProperty -ClientObject $Folder -Property ParentFolder
$ParentFolderURL = $ParentFolder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length+1)
Remove-PnPFolder -Name $Folder.Name -Folder $ParentFolderURL -Force -Recycle
Write-Host -f Green ("Deleted Folder: '{0}' at '{1}'" -f $Folder.Name, $Folder.ServerRelativeURL)
}
}
#Call the Function to Delete empty Folders
Delete-PnPEmptyFolder $List.RootFolder
Özet
Sonuç olarak, SharePoint Online'da boş klasörleri silmek zaman alıcı bir görev olabilir ancak PowerShell kullanımıyla bu işlem otomatikleştirilebilir. Bu makalede sağlanan komut dosyasını kullanarak, SharePoint Online ortamınızdaki boş klasörleri hızlı ve kolay bir şekilde kaldırarak sitenizi düzenli ve güncel tutabilirsiniz.


