Supprimer les dossiers vides dans SharePoint Online
Après avoir fusionné les dossiers en double dans SharePoint Online, je devais supprimer les dossiers vides. C'est quelque chose que nous pouvons également faire avec PowerShell et PnP.
# SharePoint url
$siteUrl = 'https://lazyadmin.sharepoint.com/'
# Site url
$site = 'sites/lab01'
# Library name
$libraryName = 'Duplicates'
# Set test mode
$whatIf = $true
# Set force mode
# Only set to true if you have fully tested it. Script WON'T ask for confirmation before deleting the file
$force = $false
#-----------------------------------------------------------[Functions]------------------------------------------------------------
#src https://www.sharepointdiary.com/2018/09/sharepoint-online-delete-empty-folders-using-powershell.html
Function Delete-PnPEmptyFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
$FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)
# 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)
if ($whatIf -ne $true)
{
#Delete the folder
Write-Host "Remove folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
Remove-PnPFolder -Name $Folder.Name -Folder $ParentFolderURL -force:$force -Recycle
}
else
{
Write-host $parentFolder
Write-Host "Empty folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
}
}
}
#-----------------------------------------------------------[Execution]------------------------------------------------------------
# Login
$url = $siteUrl + '/' + $site
Connect-PnPOnline -Url $url -UseWebLogin
# Cleanup empty folders
$Web = Get-PnPWeb
$List = Get-PnPList -Identity $libraryName -Includes RootFolder
Delete-PnPEmptyFolder $List.RootFolderLe script parcourra tous les dossiers de manière récursive. Si le dossier est vide, il le supprimera. Si vous définissez la variable WhatIf sur true en haut du script, elle affichera uniquement les dossiers qu'elle supprimera. De cette façon, vous pouvez tester le script avant de l'exécuter.
Supprimer des dossiers en fonction du nom
Si vous devez uniquement supprimer des dossiers en fonction de leur nom, par exemple un dossier qui se termine par *(1), vous pouvez modifier la dernière partie de la fonction de suppression en :
If ($Files.Count -eq 0 -and $SubFolders.Count -eq 0)
{
if ($Folder.Name -like "*(1)") {
#Delete the folder
$ParentFolder = Get-PnPProperty -ClientObject $Folder -Property ParentFolder
$ParentFolderURL = $ParentFolder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)
if ($whatIf -ne $true)
{
#Delete the folder
Write-Host "Remove folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
Remove-PnPFolder -Name $Folder.Name -Folder $ParentFolderURL -force:$force -Recycle
}
else
{
Write-host $parentFolder
Write-Host "Empty folder:" $Folder.Name "in" $ParentFolderURL -ForegroundColor Red
}
}
}Vous pouvez trouver la version originale du script ici sur Sharepointdairy.com. Je n'ai apporté que quelques petites modifications au script. Vous pouvez également obtenir le script complet ici sur mon Github.