SharePoint Online: Get Document Library Size using PowerShell

Requirement: Get the Size of a SharePoint Online Document Library

Get SharePoint Online Document Library Size using PowerShell

How to Check SharePoint Online Document Library Size?

Are you looking for a way to quickly find out the size of your document library in SharePoint Online? In this guide, we’ll show you how to get the size of your document library, so you can keep an eye on its growth. We’ll also show you how to use PowerShell to get the size of your document library.

To get a Document library size, do the following: 

  • Login to your SharePoint Online site >> Click on Settings >> Site Settings
  • Click on “Storage Metrics” under “Site Collection Administration”
  • The storage metrics page shows size of each document library in the site under “Total Size” column.
    sharepoint online get document library size
You can also get the size of a document library from SharePoint Designer and Explorer view from properties of the document library.

PowerShell to Get List or Document Library Size in SharePoint Online:

Use this PowerShell script to get a library size in 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 Get the size of a List or Library in SharePoint Online
Function Get-SPOListSize($SiteURL, $ListName)
{ 
     Try
     {
        #Get credentials to connect to SharePoint Online
        $Cred = Get-Credential
 
        #Set up the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
     
        #get the list
        $List = $Ctx.Web.Lists.GetByTitle($ListName)
        $Ctx.Load($List)
        $Ctx.ExecuteQuery()

        #Query to Get all List Items from all folders - exclude Folder objects
        $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
        $Query.ViewXml = "<View Scope='RecursiveAll'><Query><OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy></Query><RowLimit Paged='TRUE'>2000</RowLimit></View>" 
        $i=1;$TotalSize = 0
        Do {
            #Get items from the list in batches
            $ListItems = $List.GetItems($Query)
            $Ctx.Load($ListItems)
            $Ctx.ExecuteQuery()
            $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition

            ForEach($ListItem in ($ListItems| Where {$_.FileSystemObjectType -eq "File"}))
            {
                #Get the File
                $File = $ListItem.File
                $Ctx.Load($File)
                $Ctx.Load($File.Versions)
                $Ctx.ExecuteQuery()
                Write-host -f Yellow "Size of '$($File.Name)' Item ($i of $($List.ItemCount)) - " -NoNewline
 
                $FileSize =0; $VersionSize = 0
                If($File.Versions.Count -ge 1)
                {
                    $VersionSize = $File.Versions | Measure-Object -Property Size -Sum | Select-Object -expand Sum
                }
                $FileSize =  $ListItem.File.Length  + $VersionSize
                Write-host "$($ListItem.File.Length) + $VersionSize :" $FileSize
                $TotalSize += $FileSize
                $i++
                #Clear
            }
        } While ($Query.ListItemCollectionPosition -ne $null)
        Return [Math]::Round($TotalSize/1MB, 2)
    }
    Catch [System.Exception]
    {
        Write-Host -f Red "Error:"$_.Exception.Message
    }
}
   
#parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName="Branding"

#Call the function to get document library size
$LibrarySize = Get-SPOListSize -SiteURL $SiteURL -ListName $ListName
Write-host -f Green "`nToal Size of the list/library: $LibrarySize MB"

This can be useful if you need to know how much storage space your library is taking up.

PnP PowerShell to Get Document Library Size

We can also get the size of a document library using PnP PowerShell.

#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$LibraryName = "Documents"
 
#Connect to SharePoint Online site
Connect-PnPOnline -Url $SiteURL -Interactive

$FileData = @()
#Iterate through all files
Get-PnPListItem -List $LibraryName -PageSize 500 | Where {$_.FieldValues.FileLeafRef -like "*.*"} | ForEach-Object {
    Write-host "Getting Size of the File:"$_.FieldValues.FileRef -NoNewline
    #Get FileSize & version Size
    $FileSizeinKB = [Math]::Round(($_.FieldValues.File_x0020_Size/1KB),2)
    $File = Get-PnPProperty -ClientObject $_ -Property File
    $Versions = Get-PnPProperty -ClientObject $File -Property Versions
    $VersionSize = $Versions | Measure-Object -Property Size -Sum | Select-Object -expand Sum
    $VersionSizeinKB = [Math]::Round(($VersionSize/1KB),2)
    $TotalFileSizeKB = [Math]::Round(($FileSizeinKB + $VersionSizeinKB),2)
    Write-host `t $TotalFileSizeKB "KB" -f Yellow

    #extract File Size data
    $FileData+=New-Object PSObject -Property  ([Ordered]@{
        "File Name"  = $_.FieldValues.FileLeafRef
        "File URL" = $_.FieldValues.FileRef
        "File Size (KB)"  = $FileSizeinKB
        "Version Size (KB)"   = $VersionSizeinKB
        "Total File Size (KB)" = $TotalFileSizeKB
    })
}
$FileData | Format-table 
#Calculate the Total Size of the document library
$LibrarySize = [Math]::Round((($FileData | Measure-Object -Property "Total File Size (KB)" -Sum | Select-Object -expand Sum)/1KB),2)
Write-host -f Green "Total Library Size (MB):" $LibrarySize

Script output:

powershell to get document library size in sharepoint online

Salaudeen Rajack

Salaudeen Rajack is a SharePoint Architect with Two decades of SharePoint Experience. He loves sharing his knowledge and experiences with the SharePoint community, through his real-world articles!

2 thoughts on “SharePoint Online: Get Document Library Size using PowerShell

  • Hi Salaudeen,

    Your articles are great and have saved lots of time for me.

    I have a DL with both folder and files and I am receiving the below error. “An error occurred while enumerating through a collection: The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested..”. I was thinking this line of the script is failing for “folder” $File = Get-PnPProperty -ClientObject $_ -Property File.

    How do I get the size details of a DL which has multiple folders with sub-folders as well as files.

    Thanks,

    Reply
  • Thank you very much. The article helped me a lot.
    Have a nice day.

    Reply

Leave a Reply