Búsqueda de sitios web

SharePoint Online: busque todos los archivos grandes usando PowerShell


Requisito: Buscar todos los archivos grandes en la colección de sitios de SharePoint Online.

¿Cómo encontrar archivos grandes en SharePoint Online?

¿Está buscando una manera de encontrar rápidamente todos los archivos grandes en su entorno de SharePoint Online? Los archivos grandes pueden consumir rápidamente espacio de almacenamiento, lo que dificulta la administración del contenido dentro de su entorno de SharePoint. En este tutorial, le mostraremos cómo encontrar todos los archivos grandes en SharePoint Online. Ya sea que se esté preparando para una auditoría organizacional o simplemente esté tratando de encontrar todos los archivos grandes en un sitio determinado para limpiar algo de espacio en el disco, esta guía le mostrará cómo ubicar archivos grandes en SharePoint Online.

Para buscar archivos grandes en SharePoint Online, puede utilizar la página "Métricas de almacenamiento".

  1. Navegue a su colección de sitios de SharePoint Online >> Haga clic en Configuración Equipo >> Configuración del sitio.
  2. En la página Configuración del sitio, haga clic en el enlace "Métricas de almacenamiento" en "Administración de la colección del sitio" (https://crescent.sharepoint.com/_layouts/15/storman.aspx)
  3. La página Métricas de almacenamiento le brinda el consumo de almacenamiento actual del sitio. Puede navegar a cada objeto de sitio/carpeta para obtener las estadísticas de almacenamiento del objeto en particular.

¡También puede incluir la columna "Tamaño de archivo" de OOTB en las vistas de su biblioteca de documentos para obtener el tamaño de archivos individuales! ¡La vista del explorador también ayuda!

SharePoint Online: PowerShell para obtener todos los archivos grandes en una colección de sitios

Obtener archivos grandes navegando a cada carpeta desde la página de métricas de almacenamiento anterior sería engorroso. Usemos PowerShell para recuperar todos los archivos más grandes en una colección de sitios 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 find large files of the web
Function Find-SPOLargeFiles([String]$SiteURL, [Microsoft.SharePoint.Client.Folder]$Folder)
{
    Write-host -f Yellow "Processing Folder: $($SiteCollURL)$($Folder.ServerRelativeURL)"
    Try {
            $LargeFileResult = @()
            #Get all Files from the folder
            $FilesColl = $Folder.Files
            $Ctx.Load($FilesColl)
            $Ctx.ExecuteQuery()
 
            #Iterate through each file and check the size
            Foreach($File in $FilesColl)
            {
                If($File.length -gt 50MB)
                {
                    $FileURL= $SiteCollURL+$File.ServerRelativeURL
                    $Result = New-Object PSObject
                    $Result | Add-Member NoteProperty FileName($File.Name)
                    $Result | Add-Member NoteProperty FileURL($FileURL)
                    $Result | Add-Member NoteProperty Size-MB([math]::Round($File.Length/1MB))
                     
                    #Add the result to an Array
                    $LargeFileResult += $Result
 
                    Write-host -f Green "Found a File '$($File.Name)' with Size $([math]::Round($File.Length/1MB))MB"

                    #Export the result to CSV file
                    $LargeFileResult | Export-CSV $ReportOutput -NoTypeInformation -Append
                }
            }
         
            #Process all Sub Folders
            $SubFolders = $Folder.Folders
            $Ctx.Load($SubFolders)
            $Ctx.ExecuteQuery()
            Foreach($Folder in $SubFolders)
            {
                #Exclude "Forms" and Hidden folders
                If( ($Folder.Name -ne "Forms") -and (-Not($Folder.Name.StartsWith("_"))))
                {
                    #Call the function recursively
                    Find-SPOLargeFiles -SiteURL $SiteURL -Folder $Folder
                }
            }
        }
    Catch {
        write-host -f Red "Error Finding Large Files!" $_.Exception.Message
    }
}

#Function to Generate Report on Large Files in a SharePoint Online Site Collection
Function Get-SPOLargeFilesRpt($SiteURL)
{
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = $Credentials
 
    #Get the web from given URL and its subsites
    $Web = $Ctx.web
    $Ctx.Load($Web)
    $Ctx.Load($web.Webs)
    $Ctx.executeQuery()

    #Call the function to get large files of the web
    Find-SPOLargeFiles -SiteURL $SiteURL -Folder $Web.RootFolder

    #Iterate through each subsite of the current web and call the function recursively
    foreach ($Subweb in $web.Webs)
    {
        #Call the function recursively to process all subsites underneath the current web
        Get-SPOLargeFilesRpt($Subweb.url)
    }
}

#Config Parameters
$SiteCollURL="https://crescent.sharepoint.com"
$ReportOutput="C:\temp\LargeFilesRpt.csv" 

#Setup Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

#Delete the Output Report, if exists
if (Test-Path $ReportOutput) { Remove-Item $ReportOutput }

#Call the function 
Get-SPOLargeFilesRpt $SiteCollURL

¡Este script le brinda la lista de todos los archivos que tienen más de 50 MB en un archivo CSV con las columnas "Nombre de archivo", "URL de archivo" y "Tamaño en MB"!

PnP PowerShell: busque archivos grandes en el sitio de SharePoint Online

Busquemos archivos grandes >100 MB en un sitio de SharePoint Online determinado con PnP PowerShell:


#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$CSVFilePath = "C:\Temp\LargeFiles.csv"

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#Get all document libraries
$FileData = @()
$DocumentLibraries = Get-PnPList | Where-Object {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $False}

#Iterate through document libraries
ForEach ($List in $DocumentLibraries)
{
    Write-host "Processing Library:"$List.Title -f Yellow
    
    #Get All Files of the library with size > 100MB 
    $Files = Get-PnPListItem -List $List -PageSize 500 | Where {($_.FieldValues.FileLeafRef -like "*.*") -and ($_.FieldValues.SMTotalFileStreamSize/1MB -gt 100)}
    
    #Collect data from each files
    ForEach ($File in $Files) 
    {
        $FileData += [PSCustomObject][ordered]@{
            Library         = $List.Title
            FileName        = $File.FieldValues.FileLeafRef
            URL              = $File.FieldValues.FileRef
            Size            = [math]::Round(($File.FieldValues.SMTotalFileStreamSize/1MB),2)
        }
    }
}
#Export Files data to CSV File
$FileData | Sort-object Size -Descending
$FileData | Export-Csv -Path $CSVFilePath -NoTypeInformation

Informe de archivos grandes para todo el inquilino

¿Qué tal generar informes de archivos grandes para todos los sitios de SharePoint Online en el inquilino?


#Config Variables
$TenantAdminURL = "https://crescent-admin.sharepoint.com"
$CSVFilePath = "C:\Temp\LargeFiles.csv"
 
#Connect to Admin Center using PnP Online
Connect-PnPOnline -Url $TenantAdminURL -Interactive

#Delete the Output Report, if exists
if (Test-Path $CSVFilePath) { Remove-Item $CSVFilePath }

#Get All Site collections - Exclude: Seach Center, Redirect site, Mysite Host, App Catalog, Content Type Hub, eDiscovery and Bot Sites
$SiteCollections = Get-PnPTenantSite | Where { $_.URL -like '*/sites*' -and $_.Template -NotIn ("SRCHCEN#0", "REDIRECTSITE#0", "SPSMSITEHOST#0", "APPCATALOG#0", "POINTPUBLISHINGHUB#0", "EDISC#0", "STS#-1")}

#Get All Large Lists from the Web - Exclude Hidden and certain lists
$ExcludedLists = @("Form Templates", "Preservation Hold Library","Site Assets", "Pages", "Site Pages", "Images",
                        "Site Collection Documents", "Site Collection Images","Style Library")

$SiteCounter = 1   
#Loop through each site collection
ForEach($Site in $SiteCollections)
{    
    #Display a Progress bar
    Write-Progress -id 1 -Activity "Processing Site Collections" -Status "Processing Site: $($Site.URL)' ($SiteCounter of $($SiteCollections.Count))" -PercentComplete (($SiteCounter / $SiteCollections.Count) * 100)
 
    #Connect to the site
    Connect-PnPOnline -Url $Site.URL -Interactive

    #Get all document libraries
    $DocumentLibraries = Get-PnPList | Where-Object {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $False -and $_.Title -notin $ExcludedLists -and $_.ItemCount -gt 0}

    $ListCounter = 1
    #Iterate through document libraries
    ForEach ($List in $DocumentLibraries)
    {
        $global:counter = 0
        $FileData = @()

        Write-Progress -id 2 -ParentId 1 -Activity "Processing Document Libraries" -Status "Processing Document Library: $($List.Title)' ($ListCounter of $($DocumentLibraries.Count))" -PercentComplete (($ListCounter / $DocumentLibraries.Count) * 100)

        #Get All Files of the library with size > 100MB
        $Files = Get-PnPListItem -List $List -Fields FileLeafRef,FileRef,SMTotalFileStreamSize -PageSize 500 -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress -Id 3 -parentId 2 -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity "Getting List Items of '$($List.Title)'" -Status "Processing Items $global:Counter to $($List.ItemCount)";} | Where {($_.FileSystemObjectType -eq "File") -and ($_.FieldValues.SMTotalFileStreamSize/1MB -gt 100)} 

        #Collect data from each files
        ForEach ($File in $Files)
        {
            $FileData += [PSCustomObject][ordered]@{
                Library      = $List.Title
                FileName  = $File.FieldValues.FileLeafRef
                URL            = $File.FieldValues.FileRef
                Size            = [math]::Round(($File.FieldValues.SMTotalFileStreamSize/1MB),2)
            }
        }

        #Export Files data to CSV File
        $FileData | Sort-object Size -Descending
        $FileData | Export-Csv -Path $CSVFilePath -NoTypeInformation -Append
        $ListCounter++
        #Write-Progress -Activity "Completed Processing List $($List.Title)" -Completed -id 2

    }
    $SiteCounter++
}

Este script puede ayudar a identificar posibles problemas de almacenamiento y determinar qué archivos deben reubicarse o archivarse.

Conclusión

Encontrar todos los archivos grandes en SharePoint Online es una tarea crítica para los administradores que desean asegurarse de que no se exceda el espacio de almacenamiento disponible. Al identificar y administrar archivos grandes, los administradores pueden liberar espacio de almacenamiento y mejorar el rendimiento de su entorno de SharePoint.

En conclusión, la capacidad de encontrar todos los archivos grandes en SharePoint Online es una herramienta valiosa para los administradores que desean mantener el estado y el rendimiento de su entorno de SharePoint. Ya sea que necesite identificar y administrar archivos grandes o monitorear el uso del almacenamiento a lo largo del tiempo, esta guía lo ayudará a encontrar la información que necesita para mantener su entorno de SharePoint funcionando sin problemas.

Artículos relacionados