SharePoint Site Detailed Storage Report using PowerShell

Requirement: Generate a detailed report on all lists and library sizes of a SharePoint site.

detailed site storage report in sharepoint using powershell

Are you curious about how much storage space your SharePoint site is using? Or, maybe you’re wondering what lists and libraries are taking up the most space. In either case, you can use PowerShell to generate a detailed storage report for your site. This report will show you the total size of all the lists, libraries on your site. It’s a great way to see where your site’s storage is being used and identify potential areas for optimization. Let’s take a look at how to generate this report.

Here is the PowerShell script to generate detailed storage information by listing all list and library sizes:

#Get Size of all lists and libraries in a SharePoint Site

Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
 
#Function to Get Storage Metrics for a list/library 
Function GetStorageMetrics($Folder)
{   
    $TotalSize=0 
    #Get the size of each file in the folder
    foreach ($File in $Folder.Files)
    {
        #Get File Size
        $FileSize = $File.TotalLength
        
        $VersionSize=0
        #Get the Versions Size
        foreach ($FileVersion in $File.Versions)
        {
            $VersionSize += $FileVersion.Size
        }
        $TotalSize += $VersionSize+ $FileSize  
    }
    

      #Get Files in Sub Folders
      foreach ($SubFolder in $Folder.SubFolders)
      {   
         if($SubFolder.Name -ne "Forms") #Leave "Forms" Folder which has List default Aspx Pages.
             {
                #Call the function recursively for the subfolders
                $TotalSize += GetStorageMetrics($SubFolder)          
             }
        } 
        
        #Return the object
     return $TotalSize
}

#Set Site URL  variable
$WebURL = "https://sharepoint.crescent.com"
#Get the Web
$Web = Get-SPWeb $WebURL

#Array to hold Storage data for all lists and libraries
$StorageDataCollection = @() 

foreach($List in $Web.Lists)
 {
    #Leave the Hidden Lists and exclude certain Libraries
    if($List.Hidden -eq $false)
    {
        #Write-host "Procesing list:" $list.title
        #Call the function to get library's Size relatedMetrics
        $LibrarySize = GetStorageMetrics($List.RootFolder)
        
        #Create an object to hold storage data
        $StorageDataResult = New-Object PSObject
        
        #Add other details of the list 
        $StorageDataResult | Add-Member -type NoteProperty -name "List/Library Name" -value $List.Title
        $StorageDataResult | Add-Member -type NoteProperty -name "Item/File Count" -value $List.ItemCount
        $StorageDataResult | Add-Member -type NoteProperty -name "Created by" -value $List.Author
        $StorageDataResult | Add-Member -type NoteProperty -name "Created on" -value $List.Created
        $StorageDataResult | Add-Member -type NoteProperty -name "Last Modified" -value $List.LastItemModifiedDate
        $StorageDataResult | Add-Member -type NoteProperty -name "URL" -value $List.DefaultViewUrl
        
        #Add storage related Data
        $StorageDataResult | Add-Member -type NoteProperty -name "Total Size (KB)" -value ([Math]::Round(($LibrarySize/1KB),2))

        #Add object to an array
        $StorageDataCollection += $StorageDataResult        
    }
 }

#Get Recycle bin size
$RecyclebinSize=0
foreach($RecycleBinItem in $Web.RecycleBin)
        {
           $RecyclebinSize += $RecycleBinItem.Size
        }
#Get the Total size of the library
$TotalSiteSize = ($StorageDataCollection | Measure-Object 'Total Size (KB)' -Sum | Select -expand Sum)


Write-host "Total Lists/Libraries Size in MB: "([Math]::Round(($TotalSiteSize/1KB),2))
write-host "Recycle bin Size in MB:" ([Math]::Round(($RecyclebinSize/1MB),2))
#Add recycle bin size
Write-host "Total site Size in MB: "([Math]::Round(($TotalSiteSize/1KB)+($RecyclebinSize/1MB),2))
write-host "Total Number of Lists/Libraries in the Site:" $Web.Lists.Count 

#export the detailed storage Info the CSV file
$StorageDataCollection | sort-object "Total Size" -descending | Export-csv "SiteStroageRpt.csv" -notypeinformation
Write-host "Site Storage Report has been generated!"
      
$Web.dispose()

This script generates the report in CSV format. Here is a snapshot after exporting to Excel:

sharepoint site storage report

It also gives the total size of lists, libraries, and the recycle bin’s size.

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!

5 thoughts on “SharePoint Site Detailed Storage Report using PowerShell

  • Sirve para SharePoint Online

    Reply
  • HI Brother…Is this script works for Sharpoint 2013

    Reply
  • Got this error After Executing above script

    The term ‘void][System.Reflection.Assembly]::LoadWithPartialName’ is not recognized as the name of a cmdlet, function, script file,
    or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

    Reply
    • Sridhar, This should work in SharePoint 2013 as well. If you face any trouble, Remove lines between #1 to #13 and add “Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue ” as the first line in your script! Make sure you are running it from any SharePoint APP/WFE Server, Logged in as a Farm Administrator.

      Reply
  • I tried on Sharepoint 2013..Got error at first Step [void][System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”).

    please help me on this

    Reply

Leave a Reply