Objective

This purpose of this document is to mention the steps to get a SharePoint Document Versioning report for a web application. The reusable script for this job has also attached with this document. This script offers -

Business Case

S. No. Business Case
1 Before we go ahead and start doing migration we need to extract many report and insights about the current SharePoint environment. One of those need is to get a SharePoint document versioning report in your SharePoint. This script will allow administrator to do this job easily.

Targeted Audience

Offerings

Technical Details

Below are the technical details for this PowerShell script -

PowerShell Script
  1. #check to see
  2. if the PowerShell Snapin is added
  3. if ((Get - PSSnapin | Where
  4. {
  5. $_.Name - eq "Microsoft.SharePoint.PowerShell"
  6. }) - eq $null)
  7. {
  8. Add - PSSnapin Microsoft.SharePoint.PowerShell;
  9. }
  10. #SharePoint DLL
  11. [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
  12. $global: currentPhysicalPath = Split - Path((Get - Variable MyInvocation - Scope 0).Value).MyCommand.Path[xml] $xmlinput = (Get - Content "$global:currentPhysicalPath\Configurations.xml")
  13. Function SPDocVersionSizeReport
  14. {
  15. foreach($configWebApp in $xmlinput.Configuration.GlobalWebApplications.GlobalWebApplication)
  16. {
  17. $webApp = Get - SPWebApplication $configWebApp.url - ErrorAction silentlycontinue
  18. if ($webApp - eq $null)
  19. {
  20. Write - host Web Application at url: $configWebApp.url does not Exists.. - foregroundcolor Red
  21. }
  22. else
  23. {
  24. try
  25. {
  26. foreach($siteCollection in $xmlinput.Configuration.GlobalWebApplications.GlobalWebApplication.SiteCollections.SiteCollection)
  27. {
  28. $siteCollUrl = $($webApp.url + $siteCollection.relativeUrl)
  29. $site = Get - SPSite - identity $siteCollUrl - ErrorAction SilentlyContinue
  30. if ($site - ne $null)
  31. {#Write the CSV Header - Tab Separated
  32. $fileName = $site.RootWeb.Title + "_" + "VersionSizeReport" + ".csv"
  33. "Site Collection Name `t Site Name`t Library `t File Name `t File URL `t File Type `t Last Modified `t No. of Versions `t Latest Version Size(MB) `t Versions Size(MB) `t Total File Size(MB)" | out - file $fileName
  34. # Fill out the names of those document libraries that should be excluded below
  35. $forbidden = @("Pages", "Converted Forms", "Master Page Gallery", "Customized Reports", "Documents",
  36. "Form Templates", "Images", "List Template Gallery", "Theme Gallery", "Reporting Templates",
  37. "Site Collection Documents", "Site Collection Images", "Site Pages", "Solution Gallery",
  38. "Style Library", "Web Part Gallery", "Site Assets", "wfpub")
  39. foreach($web in $site.AllWebs)
  40. {#Loop through each List
  41. foreach($List in $Web.Lists)
  42. {#Get only Document Libraries & Exclude Hidden System libraries
  43. if (($List.BaseType - eq "DocumentLibrary") - and($List.Hidden - eq $false) - and($SystemLists - notcontains $List.Title))
  44. {
  45. foreach($ListItem in $List.Items)
  46. {##Consider items with 5 + versions And apply Date Filter
  47. if (($ListItem.Versions.Count - gt 1) - and($ListItem['Modified'] - gt([DateTime]::Now.AddYears(-1))))
  48. {
  49. $versionSize = 0# File Versioning details
  50. foreach($FileVersion in $ListItem.File.Versions)
  51. {
  52. $versionSize = $versionSize + $FileVersion.Size;
  53. }#Calculate Total File Size in MB
  54. $ToalFileSize = [Math]::Round(((($ListItem.File.Length + $versionSize) / 1024) / 1024), 2)
  55. $VersionSize = [Math]::Round((($versionSize / 1024) / 1024), 2)
  56. # Size of the current version
  57. $CurrentVersionSize = [Math]::Round((($ListItem.File.Length / 1024) / 1024), 2)
  58. # Log the data to a CSV
  59. if ($versionSize - gt 0)
  60. {
  61. "$($Site.RootWeb.Title) `t $($Web.Title) `t $($List.Title) `t $($ListItem.Name) `t $($Web.Url)/$($ListItem.Url) `t $($ListItem['File Type'].ToString()) `t $($ListItem['Modified'].ToString())`t $($ListItem.Versions.Count) `t $CurrentVersionSize `t $($versionSize) `t $($ToalFileSize)" | Out - File $fileName - Append
  62. }
  63. }
  64. }
  65. }
  66. }
  67. $Web.Dispose()
  68. }
  69. $site.Dispose()
  70. }
  71. else
  72. {
  73. Write - host - ForeGroundColor Red "Site Collection with this name does not exist. Please check if you have typed the URL correctly."
  74. }
  75. }#Message to console
  76. write - host "Versioning Report Generated Successfully!"
  77. }
  78. catch [Exception]
  79. {
  80. write - output(”Error: ”+$_.Exception.ToString())
  81. }
  82. }
  83. }
  84. }
  85. #Call the Function to Generate Version History Report
  86. SPDocVersionSizeReport $xmlinput
Output

This script will generate a separate report file for every site collection it operates on. See below.

Output