SharePoint Online: obtenga el recuento de archivos y subcarpetas en cada carpeta de una biblioteca de documentos mediante PowerShell
Requisito: Obtener el recuento de archivos y subcarpetas en cada carpeta de una biblioteca de documentos de SharePoint Online.
¿Cómo obtener el número de archivos y subcarpetas en cada carpeta de una biblioteca de documentos?
Cuando una biblioteca de documentos tiene varias carpetas, subcarpetas y archivos, puede obtener la cantidad de archivos y subcarpetas en cada nivel agregando los campos "Recuento de elementos secundarios" y "Recuento de elementos secundarios" a la vista. Siga estos pasos para mostrar la cantidad de archivos en una carpeta:
- Navegue a la biblioteca de documentos >> Haga clic en el menú desplegable Ver >> “Editar vista actual”.
- Seleccione las columnas "Recuento de elementos secundarios" y "Recuento de elementos secundarios" y haga clic en Aceptar.
Ahora, la vista muestra la cantidad de subcarpetas y la cantidad de elementos en el nivel superior de cada carpeta.
Obtener archivos y recuento de subcarpetas en cada carpeta de una biblioteca de documentos mediante PowerShell
Aquí está PowerShell para encontrar la cantidad de archivos y subcarpetas en cada carpeta en una biblioteca de documentos de SharePoint Online usando PnP PowerShell:
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Project Documents"
#Function to get number of Sub-folder and Files count recursively
Function Get-SPOFolderStats
{
[cmdletbinding()]
param
(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)][Microsoft.SharePoint.Client.Folder]$Folder
)
#Get Sub-folders of the folder
Get-PnPProperty -ClientObject $Folder -Property ServerRelativeUrl, Folders | Out-Null
#Get the SiteRelativeUrl
$Web = Get-PnPWeb -Includes ServerRelativeUrl
$SiteRelativeUrl = $Folder.ServerRelativeUrl -replace "$($web.ServerRelativeUrl)", [string]::Empty
[PSCustomObject] @{
Folder = $Folder.Name
Path = $Folder.ServerRelativeUrl
ItemCount = Get-PnPFolderItem -FolderSiteRelativeUrl $SiteRelativeUrl -ItemType File | Measure-Object | Select -ExpandProperty Count
SubFolderCount = Get-PnPFolderItem -FolderSiteRelativeUrl $SiteRelativeUrl -ItemType Folder | Measure-Object | Select -ExpandProperty Count
}
#Process Sub-folders
ForEach($SubFolder in $Folder.Folders)
{
Get-SPOFolderStats -Folder $SubFolder
}
}
#Connect to SharePoint Online
Connect-PnPOnline $SiteURL -Credentials (Get-Credential)
#Call the Function to Get the Library Statistics - Number of Files and Folders at each level
$FolderStats = Get-PnPList -Identity $ListName -Includes RootFolder | Select -ExpandProperty RootFolder | Get-SPOFolderStats | Sort Path
$FolderStats
#Export to CSV
$FolderStats | Export-Csv -Path "C:\Temp\DocLibStats.csv" -NoTypeInformation
¡Este script muestra los datos en la pantalla y genera un archivo CSV!
Un enfoque alternativo para contar elementos en bibliotecas de documentos más grandes
Si bien el script anterior funciona perfectamente bien para bibliotecas de documentos más pequeñas, aparece el mensaje "El intento de operación está prohibido porque excede el umbral de vista de lista". error ya que Get-PnPFolderItem no puede manejar bibliotecas con más de 5000 elementos a partir de hoy. Entonces, aquí está el enfoque alternativo para hacer que los archivos y carpetas cuenten en cada carpeta en una biblioteca de documentos determinada.
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Branding"
$CSVFile = "C:\Temp\FolderStats.csv"
#Connect to SharePoint Online
Connect-PnPOnline $SiteURL -Interactive
#Get the list
$List = Get-PnPList -Identity $ListName
#Get Folders from the Library - with progress bar
$global:counter = 0
$FolderItems = Get-PnPListItem -List $ListName -PageSize 500 -Fields FileLeafRef -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete `
($global:Counter / ($List.ItemCount) * 100) -Activity "Getting Items from List:" -Status "Processing Items $global:Counter to $($List.ItemCount)";} | Where {$_.FileSystemObjectType -eq "Folder"}
Write-Progress -Activity "Completed Retrieving Folders from List $ListName" -Completed
$FolderStats = @()
#Get Files and Subfolders count on each folder in the library
ForEach($FolderItem in $FolderItems)
{
#Get Files and Folders of the Folder
Get-PnPProperty -ClientObject $FolderItem.Folder -Property Files, Folders | Out-Null
#Collect data
$Data = [PSCustomObject][ordered]@{
FolderName = $FolderItem.FieldValues.FileLeafRef
URL = $FolderItem.FieldValues.FileRef
FilesCount = $FolderItem.Folder.Files.Count
SubFolderCount = $FolderItem.Folder.Folders.Count
}
$Data
$FolderStats+= $Data
}
#Export the data to CSV
$FolderStats | Export-Csv -Path $CSVFile -NoTypeInformation

