Wednesday, December 14, 2016

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()
        [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
        $Lists = $Web.Lists
        #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>"

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

                        If($File.Versions.Count -ge 1)
                            #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

#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

You might also like:
SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Document SharePoint Farm
Automatically generate SharePoint documentation.

Check out these SharePoint products:

No comments :

Post a Comment

Please Login and comment to get your questions answered!

You might also like:

Related Posts Plugin for WordPress, Blogger...