SharePoint Online: Törölje az üres mappákat a PowerShell segítségével
Követelmény: Törölje az üres mappákat a SharePoint Online Dokumentumtárban a PowerShell segítségével.
Problémái vannak a SharePoint Online webhelyén található sok üres mappa miatt? És ha olyan vagy, mint én, valószínűleg azon töprengtél, hogy van-e egyszerűbb módja ennek. Mert ezek azonosítása és törlése a webböngészővel az egyes mappákba navigálással nehézkes lenne. A PowerShell azonban lehetőséget kínál arra, hogy gyorsan és egyszerűen megszabaduljon tőlük. Ebben a blogbejegyzésben megvizsgáljuk, hogyan törölhet üres mappákat a SharePoint Online-ban a PowerShell segítségével.
Hogyan kereshetek üres mappákat a SharePoint Online-ban?
Ha egy mappában nincs fájl vagy almappa, akkor üresnek tekintendő. Tehát a következőképpen találhatjuk meg az üres mappákat a SharePoint Online-ban a webes felhasználói felületről az Elemek száma használatával (az elemek száma a mappa gyökér szintjén, és NEM az összes elem száma az összes almappában.) és a Mappa gyermekszáma (A mappa gyökérszintjén lévő almappák száma).
- Keresse meg a dokumentumtárat >> Kattintson az „Aktuális nézet szerkesztése” elemre a Nézetek legördülő menüben.
Válassza ki a „Mappa utódszáma” és az „Elemek száma” oszlopokat, majd kattintson az OK gombra.
Most a nézet az egyes mappák legfelső szintjén az elemek számát és a mappák számát mutatja.
PowerShell az üres mappák megkereséséhez a SharePoint Online-ban:
Ez a szkript megvizsgálja az adott dokumentumkönyvtár minden mappáját, és ellenőrzi, hogy a fájlok és almappák száma „0”-e.
#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
}
Ez a szkript felsorolja az összes üres mappát az adott könyvtár minden szintjén. Ha azonban törölünk egy üres mappát, a szülőmappája is üres lesz. (feltéve, hogy a szülőmappában csak egy üres mappa van, és nincs benne más fájl!).
SharePoint Online: PowerShell az üres mappák eltávolításához
Ez a PowerShell-szkript törli az összes üres mappát egy adott SharePoint Online dokumentumtárból.
#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
}
PnP PowerShell az üres mappák törléséhez a SharePoint Online-ban:
Egyszerűsítsük tovább a fenti szkriptet a PnP PowerShell segítségével:
#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
Összegzés
Összefoglalva, az üres mappák törlése a SharePoint Online-ban időigényes feladat lehet, de a PowerShell használatával automatizálható. A cikkben található szkript használatával gyorsan és egyszerűen eltávolíthatja az üres mappákat a SharePoint Online környezetből, így webhelye rendszerezett és naprakész.


