Requirement: Generate a detailed report on all list and library sizes of a SharePoint site.
Solution: PowerShell script! Here is the PowerShell script to generate detailed storage information with listing all list and library sizes.
It also gives the total size of lists, libraries and size of the recycle bin.
Solution: PowerShell script! Here is the PowerShell script to generate detailed storage information with listing all list and library sizes.
#Get Size of all lists and libraries in a SharePoint SiteThis script generates the report in CSV format. Here is a snapshot after exporting to Excel:
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
#Get-SPWeb cmdlet for MOSS 2007
Function global:Get-SPWeb($url)
{
$site= New-Object Microsoft.SharePoint.SPSite($url)
if($site -ne $null)
{
$web=$site.OpenWeb()
}
return $web
}
#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 = "http://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()
It also gives the total size of lists, libraries and size of the recycle bin.