SharePoint Online: eliminar todos los archivos y subcarpetas de una carpeta de forma recursiva mediante PowerShell
Requisito: Vaciar una carpeta en la biblioteca de documentos de SharePoint Online eliminando todos sus archivos y subcarpetas de forma recursiva.
¿Cómo eliminar una carpeta con subcarpetas y archivos de SharePoint Online?
La eliminación de archivos y subcarpetas en SharePoint Online se puede realizar a través de la interfaz de usuario de SharePoint. Para eliminar todos los archivos y subcarpetas de una carpeta en SharePoint Online, siga estos pasos:
- Abra su sitio de SharePoint Online en el navegador >> Navegue hasta la carpeta que desea eliminar.
- Seleccione todos los archivos y subcarpetas de la carpeta.
- Haga clic en el botón "Eliminar" en la barra de comandos o haga clic derecho y seleccione "Eliminar".
Confirme la eliminación haciendo clic en "Eliminar" en el cuadro de diálogo de confirmación.
Eliminar archivos y subcarpetas es un proceso bastante sencillo, pero si tiene que eliminar varios archivos y subcarpetas, este proceso puede llevar mucho tiempo. Para automatizar esta tarea, puede utilizar PowerShell. Exploremos cómo eliminar todos los archivos y subcarpetas de una carpeta en SharePoint Online usando PowerShell de forma recursiva.
PowerShell para eliminar todos los archivos y subcarpetas de una carpeta de SharePoint Online
Mientras me preparaba para la migración, tuve que borrar algunos datos antiguos, por lo que necesitaba eliminar archivos y carpetas de forma recursiva de un sitio de SharePoint Online. Podemos usar PowerShell para eliminar archivos y carpetas de forma recursiva en SharePoint Online. Esta puede ser una excelente manera de limpiar rápidamente su sitio o eliminar grandes cantidades de contenido.
Eliminemos una carpeta con subcarpetas y archivos de SharePoint Online:
#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
}
Este script de PowerShell elimina todos los archivos, subcarpetas de una carpeta y luego también elimina la carpeta determinada.
PnP PowerShell para vaciar una carpeta en SharePoint Online:
Con PnP PowerShell, podemos eliminar fácilmente todos los archivos y carpetas de forma recursiva en lugar de eliminarlos manualmente, uno a la vez. Aquí está el script PnP PowerShell para borrar todos los archivos y subcarpetas de una carpeta determinada en la biblioteca de documentos de SharePoint Online:
#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
Para eliminar una carpeta en la biblioteca de documentos de SharePoint Online, use: SharePoint Online: ¿Cómo eliminar una carpeta usando PowerShell?
Eliminar una carpeta con archivos en SharePoint Online
¿No se puede eliminar una carpeta en SharePoint Online debido a la política de retención? A continuación se explica cómo eliminar todos los archivos y subcarpetas de una carpeta:
- Conéctese a SharePoint Online mediante el cmdlet Connect-PnPOnline.
- Recupere el contenido de la carpeta mediante el cmdlet Get-PnPListItem.
- Elimine todos los archivos y subcarpetas de la carpeta mediante el cmdlet Remove-PnPListItem.
#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
}
El código anterior puede causar un problema de umbral excedido en listas más grandes. ¿Qué tal eliminar una carpeta grande con sus archivos y subcarpetas en lotes para evitar cualquier posible problema de superación del umbral de vista de lista? Utilice este script para vaciar una carpeta en SharePoint Online:
#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
}
Para eliminar varias carpetas en SharePoint Online desde un archivo CSV, use: ¿Eliminar carpetas de forma masiva en SharePoint Online desde un CSV usando PowerShell?
Conclusión:
En conclusión, usar PowerShell para eliminar todos los archivos y subcarpetas de una carpeta en SharePoint Online es un método potente y eficiente para automatizar la tarea de limpiar su entorno de SharePoint. Al aprovechar las capacidades de PowerShell, puede ahorrar tiempo y garantizar que su entorno de SharePoint permanezca organizado y optimizado. Sin embargo, es importante utilizar este método con cuidado y sólo después de verificar que los archivos y carpetas que se van a eliminar no son necesarios. Los archivos y carpetas eliminados en SharePoint Online se mueven a la Papelera de reciclaje y se pueden restaurar dentro de un cierto período de tiempo, así que asegúrese de usar estos comandos de manera responsable.

