SharePoint Site Detailed Storage Report using PowerShell
Requirement: Generate a detailed report on all lists and library sizes of a SharePoint site.
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:
It also gives the total size of lists, libraries, and the recycle bin’s size.
Sirve para SharePoint Online
HI Brother…Is this script works for Sharpoint 2013
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.
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.
I tried on Sharepoint 2013..Got error at first Step [void][System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”).
please help me on this