SharePoint Online:使用 PowerShell 获取文档库中每个文件夹的文件和子文件夹计数
要求:获取 SharePoint Online 文档库中每个文件夹中的文件和子文件夹的数量。
如何获取文档库每个文件夹中的文件和子文件夹的数量?
当文档库有多个文件夹、子文件夹和文件时,您可以通过在视图中添加“文件夹子计数”和“项目子计数”字段来获取每个级别的文件和子文件夹的数量。请按照以下步骤显示文件夹中的文件数:
- 导航到文档库>>单击“视图”下拉菜单>>“编辑当前视图”。
- 选择“文件夹子计数”和“项目子计数”列,然后单击“确定”。
现在,该视图显示子文件夹的数量以及每个文件夹顶层的项目数量。
使用 PowerShell 获取文档库中每个文件夹的文件、子文件夹计数
以下是使用 PnP PowerShell 查找 SharePoint Online 文档库中每个文件夹中的文件和子文件夹数量的 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
该脚本将数据输出到屏幕上并生成 CSV 文件!
对大型文档库中的项目进行计数的替代方法
虽然上述脚本对于较小的文档库来说工作得很好,但它会收到“尝试的操作被禁止,因为它超出了列表视图阈值”。错误,因为截至今天,Get-PnPFolderItem 无法处理包含超过 5000 个项目的库!因此,这是获取给定文档库中每个文件夹的文件和文件夹计数的替代方法。
#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

