kwizcom banner advertisement

SharePoint Online: Version History Report using PowerShell

Requirement: Generate version history report for all sites in a SharePoint site collection.
version history report for all libraries in sharepoint online using powershell

PowerShell to Generate Version History Report for SharePoint Online:
#Import SharePoint Online module
Import-Module Microsoft.Online.SharePoint.Powershell

Function Generate-VersionHistoryReport()
{
  param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ReportOutput
    )
    Try {
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
        
        #Get all subsites and Lists from the site
        $Web = $Ctx.Web
        $Ctx.Load($Web)
        $Ctx.Load($Web.Webs)  
        $Lists = $Web.Lists
        $Ctx.Load($Lists)        
        $Ctx.ExecuteQuery()
        
        #Exclude system lists
        $ExcludedLists = @("Access Requests","App Packages","appdata","appfiles","Apps in Testing","Cache Profiles","Composed Looks","Content and Structure Reports","Content type publishing error log","Converted Forms",
            "Device Channels","Form Templates","fpdatasources","Get started with Apps for Office and SharePoint","List Template Gallery", "Long Running Operation Status","Maintenance Log Library", ,"Master Docs","Master Page Gallery"
               "MicroFeed","NintexFormXml","Quick Deploy Items","Relationships List","Reusable Content","Reporting Metadata", "Reporting Templates", "Search Config List","Site Assets", "Site Pages", "Solution Gallery",
                    "Style Library","Suggested Content Browser Locations","Theme Gallery", "TaxonomyHiddenList","User Information List","Web Part Gallery","wfpub","wfsvc","Workflow History","Workflow Tasks")

        
        Write-host -f Yellow "Processing Site: "$SiteURL
        $VersionHistoryData = @()

        #Iterate through each list in a site and get versioning configuration
        ForEach($List in $Lists)
        {
            if( ($ExcludedLists -NotContains $List.Title) -and ($List.EnableVersioning) -and ($List.BaseType -eq "DocumentLibrary"))
            {
                #Get All Files --Excluding Folders
                $Query =  New-Object Microsoft.SharePoint.Client.CamlQuery
                $Query.ViewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq></Where><OrderBy><FieldRef Name='ID' /></OrderBy></Query></View>"
                $ListItems=$List.GetItems($Query)
                $Ctx.Load($ListItems)
                $Ctx.ExecuteQuery()

                #Iterate throgh each version of file
                Foreach ($Item in $ListItems)
                {
                    $File = $web.GetFileByServerRelativeUrl($Item["FileRef"])
                    $Ctx.Load($File)
                    $Ctx.Load($File.Versions)
                    $Ctx.ExecuteQuery()

                        If($File.Versions.Count -ge 1)
                        {
                            $VersionSize=0 
                            #Calculate Version Size
                            Foreach ($Version in $File.Versions)
                            {
                                $VersionSize = $VersionSize + $Version.Size
                            }

                            #Send Data to object array
                            $VersionHistoryData += New-Object PSObject -Property @{
                            'Site' = $SiteURL
                            'Library' = $List.Title
                            'File Name' = $File.Name
                            'Version Count' = $FileVersions.count
                            'Version Size' = ($VersionSize/1024)
                            'URL' = $SiteURL+$File.ServerRelativeUrl
                            }
                        }
                }
            }
        }
        #Export the data to CSV
        $VersionHistoryData | Export-Csv $ReportOutput -Append -NoTypeInformation

        #Iterate through each subsite in the current web
        Foreach ($Subweb in $Web.Webs)
        {
            #Call the function recursively to process all subsites underneaththe current web
            Generate-VersionHistoryReport -SiteURL $Subweb.URL -ReportOutput $ReportOutput
        }
     }
    Catch {
        write-host -f Red "Error Generating version History Report!" $_.Exception.Message
    } 
}

#Set parameter values
$SiteURL="https://crescent.sharepoint.com"
$ReportOutput="C:\Temp\VersionHistory.csv"

#Get Credentials to connect
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

#Delete the Output report file if exists
if (Test-Path $ReportOutput) { Remove-Item $ReportOutput }

#Call the function to generate version History Report
Generate-VersionHistoryReport -SiteURL $SiteURL -ReportOutput $ReportOutput 

This script produces a CSV file with data such as:
  • Site 
  • Library 
  • File Name
  • Number of Versions
  • Version History Size
  • URL of the document
SharePoint Online: Version History Report using PowerShell SharePoint Online: Version History Report using PowerShell Reviewed by Salaudeen Rajack on 8:12 PM Rating: 5

No comments:

Please Login and comment to get your questions answered!

Powered by Blogger.