当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 获取文档库中每个文件夹的文件和子文件夹计数

作者:精品下载站 日期:2024-12-14 15:32:21 浏览:14 分类:玩电脑

SharePoint Online:使用 PowerShell 获取文档库中每个文件夹的文件和子文件夹计数


要求:获取 SharePoint Online 文档库中每个文件夹中的文件和子文件夹的数量。

如何获取文档库每个文件夹中的文件和子文件夹的数量?

当文档库有多个文件夹、子文件夹和文件时,您可以通过在视图中添加“文件夹子计数”和“项目子计数”字段来获取每个级别的文件和子文件夹的数量。请按照以下步骤显示文件夹中的文件数:

  1. 导航到文档库>>单击“视图”下拉菜单>>“编辑当前视图”。
  2. 选择“文件夹子计数”和“项目子计数”列,然后单击“确定”。

[玩转系统] SharePoint Online:使用 PowerShell 获取文档库中每个文件夹的文件和子文件夹计数

现在,该视图显示子文件夹的数量以及每个文件夹顶层的项目数量。

使用 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 文件!

[玩转系统] SharePoint Online:使用 PowerShell 获取文档库中每个文件夹的文件和子文件夹计数

对大型文档库中的项目进行计数的替代方法

虽然上述脚本对于较小的文档库来说工作得很好,但它会收到“尝试的操作被禁止,因为它超出了列表视图阈值”。错误,因为截至今天,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

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯