Búsqueda de sitios web

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:

  1. Abra su sitio de SharePoint Online en el navegador >> Navegue hasta la carpeta que desea eliminar.
  2. Seleccione todos los archivos y subcarpetas de la carpeta.
  3. Haga clic en el botón "Eliminar" en la barra de comandos o haga clic derecho y seleccione "Eliminar".
  4. 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:

  1. Conéctese a SharePoint Online mediante el cmdlet Connect-PnPOnline.
  2. Recupere el contenido de la carpeta mediante el cmdlet Get-PnPListItem.
  3. 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.

Artículos relacionados