Help - need to create a report of all versions of a file for all files in all doc Libraries

Copper Contributor

Hi all, I can use some help. I'm fairly new to PowerShell. I would appreciate your help dearly.


I have been asked to write a script to list all files in all document libraries on a site before a given date. 

I have searched the internet and found the following script that searches all document libraries in a site and compiles the number of versions for each file. It exports the following to a CSV file with the following data:


File Name - Site Name - Version Count - Version size - Library - Url


Here is the script:

#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




        Write-host -f Yellow "Processing Site: "$SiteURL


        #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")


        #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"))


                Write-Host "`tProcessing Library:"$List.Title

                #Query to Batch process Items from the document library

                $Query =  New-Object Microsoft.SharePoint.Client.CamlQuery

                $Query.ViewXml = "<View Scope='RecursiveAll'><Query><OrderBy><FieldRef Name='ID' /></OrderBy></Query><RowLimit>2000</RowLimit></View>"

                $VersionHistoryData = @()


                Do {




                    $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition


                    #Iterate through each version of the file


                    $VersionHistoryData = @()


                    #Iterate through each file - Excluding Folder Objects


                    Foreach ($Item in $ListItems | Where { $_.FileSystemObjectType -eq "File"})


                        $File = $web.GetFileByServerRelativeUrl($Item["FileRef"])





                        If($File.Versions.Count -ge 1)





                            #Print File Name

                             write-host $


                            #Calculate Version Size


                            Foreach ($Version in $File.Versions)


                                write-host $Version.Size

                                write-host $

                                $VersionSize = $VersionSize + $Version.Size



                            #Send Data to the object array


                            $VersionHistoryData += New-Object PSObject -Property @{


                            'Site' = $SiteURL

                            'Library' = $List.Title

                            'File Name' = $File.Name

                            'Version Count' = $File.Versions.count

                            'Version Size-KB' = ($VersionSize/1024)

                            'URL' = $SiteURL+$File.ServerRelativeUrl






                } While ($Query.ListItemCollectionPosition -ne $null)




                #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 underneath the 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 the version History Report


Generate-VersionHistoryReport -SiteURL $SiteURL -ReportOutput $ReportOutput

1 Reply
What is your question? If you are more specific, we can help you ;)
Some questions, that might help:
- You stated your task and posted a script, but what is the problem?
- Is there an error message?
- Is the output of the script not as desired?