Public/Get-VersionHistoryReport.ps1
<#
.SYNOPSIS Retrieves version history information for files in SharePoint Online. .DESCRIPTION The Get-VersionHistoryReport function retrieves version history information for files in SharePoint Online. It connects to the specified SharePoint Online sites, retrieves the version history for each file in the specified list, and exports the information to a CSV file. .PARAMETER ClientID Specifies the Client ID of the Azure AD application that has the necessary permissions to connect to the SharePoint Online site. If not already done so, https://pnp.github.io/powershell/articles/registerapplication has instructions to register the required application. .PARAMETER sites Specifies an array of SharePoint Online site URLs to connect to. .PARAMETER ListName Specifies the name of the SharePoint Online list to retrieve version history from. .PARAMETER LogPath Specifies the path to the CSV file where the version history information will be exported. .EXAMPLE $date = Get-Date -Format yyyy-MM-dd Get-VersionHistoryReport -sites "https://company.sharepoint.com/sites/site1", "https://company.sharepoint.com/sites/site2" -ListName "Documents" -LogPath "$env:userprofile\downloads\$date SharepointVersionReport.csv" Retrieves the version history for files in the "Documents" list from two SharePoint Online sites and exports the information to your downloads folder. .NOTES - This function requires the pnp.powershell module to be installed. You can install it by running the following command: Install-Module -Name pnp.powershell -Force - You need to have the necessary permissions to connect to the SharePoint site and perform get item versions. - If you have issues with pnp logins review these requirements. https://pnp.github.io/powershell/articles/registerapplication .LINK https://github.com/TheTaylorLee/AdminToolbox #> function Get-VersionHistoryReport { param ( [Parameter(Mandatory = $true)][string]$ClientID, [Parameter(Mandatory = $true)][string[]]$sites, [Parameter(Mandatory = $true)][string]$ListName, [Parameter(Mandatory = $true)][string]$LogPath ) #Import Modules Import-Module PnP.PowerShell foreach ($site in $sites) { #Connect to SharePoint Online site. Connect-PnPOnline -Url $Site -Interactive -ClientId $ClientId $ListItems = Get-PnPListItem -List $ListName -PageSize 500 -Fields Author, Editor, Created, File_x0020_Type, File_x0020_Size, ObjectVersion | Where-Object { $_.FileSystemObjectType -eq "File" } foreach ($Item in $ListItems) { $versions = Get-PnPFileVersion -Url $item.FieldValues.FileRef foreach ($version in $versions) { [PSCustomObject]@{ Site = [string]($site).split("/")[(($site).split("/").count) - 1] Name = $Item["FileLeafRef"] Type = $Item.FileSystemObjectType FileSizeMB = [Math]::Round(($version.size / 1MB), 2) Version = $version.VersionLabel RelativeURL = $Item["FileRef"] CreatedByEmail = $Item["Author"].Email CreatedOn = $Item["Created"] Modified = $Item["Modified"] ModifiedByEmail = $Item["Editor"].Email } | Export-Csv $logpath -Append -NoTypeInformation } } # Disconnect from SharePoint Online Disconnect-PnPOnline } } |