Eliminar carpetas vacías en SharePoint Online
Después de fusionar carpetas duplicadas en SharePoint Online, necesitaba eliminar las carpetas vacías. Esto es algo que también podemos hacer con PowerShell y 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.RootFolderEl script recorrerá todas las carpetas de forma recursiva. Si la carpeta está vacía, la eliminará. Si configura la variable WhatIf en verdadero en la parte superior del script, solo mostrará qué carpetas eliminaría. De esta manera puedes probar el script antes de ejecutarlo.
Eliminar carpetas según el nombre
Si solo necesita eliminar carpetas según su nombre, por ejemplo, una carpeta que termina con *(1), puede cambiar la última parte de la función de eliminación a:
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
}
}
}Puede encontrar la versión original del script aquí en Sharepointdairy.com. Sólo hice un par de pequeños cambios al guión. También puedes obtener el script completo aquí en mi Github.