How to Export SharePoint 2010/2013 Version history of Document Library using PowerShell

Here is a powershell script you can use to get csv output of version history from SharePoint 2010 or 2013 list/libraries where versioning is enabled.The output includes changes to individual item fields as viewable from item version history.

The version information is accessed through SPListItemVersionCollection and SPFileVersionCollection objects.

$url  = yourSiteUrl #Example http://server.com/web
$web  = Get-SPWeb $url 
$docLibrary = "DocLibraryName" #Here use your document library name Ex SharedDocuments
$list = $web.Lists[$documenntLibrary] 
$csvFile = "C:\temp\versionHistory.csv" #Where the CSV file is saved 
 
function GetFieldValue([Microsoft.SharePoint.SPField]$field, [Microsoft.SharePoint.SPListItemVersion]$currentVersion) 
{ 
    if(($field.Type -eq "User"-and ($currentVersion[$field.Title] -ne $null)) 
    { 
        $newUser = [Microsoft.SharePoint.SPFieldUser]$field; 
        $fieldStr = $newUser.GetFieldValueAsText($currentVersion[$field.Title]) 
        $fieldStr = "$($field.Title): $fieldStr" 
    } 
    elseif(($field.Type -eq "Lookup"-and ($currentVersion[$field.Title] -ne $null)) 
    { 
        $newLookup = [Microsoft.SharePoint.SPFieldLookup]$field; 
        $fieldStr = $newLookup.GetFieldValueAsText($currentVersion[$field.Title]) 
        $fieldStr = "$($field.Title): $fieldStr" 
    } 
    elseif(($field.Type -eq "ModStat"-and ($currentVersion[$field.Title] -ne $null)) 
    { 
        $newModStat = [Microsoft.SharePoint.SPFieldModStat]$field; 
        $fieldStr = $newModStat.GetFieldValueAsText($currentVersion[$field.Title]) 
        $fieldStr = "$($field.Title): $fieldStr" 
    } 
    else 
    {                             
        $fieldStr = "$($field.Title): $($currentVersion[$field.Title])" 
    } 
    return $fieldStr 
}      
 
#Create/overwrite csv file, add headers: 
Set-Content -Path $csvFile -Value ",No.,Modified,Modified By, Size, Comment`n" 
 
foreach($item in $list.Items) 
{ 
    $versions = $item.Versions 
    $versionStr = "$($item["Title"])`n" 
     
    for($i = 0; $i -lt $versions.Count; $i++) 
    { 
        $currentVersion = $versions[$i] 
        $checkInComment = $item.File.Versions[$item.File.Versions.Count - $i].CheckInComment 
        if($i -eq 0) 
        { 
            $fileSize = $item.File.Length 
        } 
        else 
        { 
            $fileSize = $item.File.Versions[$item.File.Versions.Count - $i].Size 
        } 
        if($fileSize -lt 1MB) 
        { 
            $fileSize = "{0:N1}" -f ($fileSize / 1KB) + " KB" 
        } 
        else 
        { 
            $fileSize = "{0:N1}" -f ($fileSize / 1MB) + " MB" 
        } 
        $modifiedTime = $web.RegionalSettings.TimeZone.UTCToLocalTime($currentVersion.Created) 
        # CSV formatting: escape double quotes allow quotations, new line and commas within cell. Do not use space between comma and double quote escapes due to csv formating. 
        $versionStr +",$($currentVersion.VersionLabel),$($modifiedTime),""$($currentVersion.CreatedBy.User.DisplayName)"",""$($fileSize)"",""$($checkInComment)"",`n" 
 
        if($i -lt ($versions.Count - 1)) 
        { 
            # If more than one version: 
            $previousVersion = $versions[$i+1] 
            foreach($field in $currentVersion.Fields) 
            { 
                if(($field.ShowInVersionHistory -eq $true-and ($currentVersion[$field.Title] -ne $previousVersion[$field.Title]) -and ($currentVersion[$field.Title] -ne "

)) 
                { 
                    $fieldStr = GetFieldValue $field $currentVersion 
                    $versionStr +=",,""$fieldStr""`n" 
                } 
            } 
        } 
        else 
        { 
            # If first version: 
            foreach($field in $currentVersion.Fields) 
            { 
                if(($field.ShowInVersionHistory -eq $true-and ($currentVersion[$field.Title] -ne "

)) 
                { 
                    $fieldStr = GetFieldValue $field $currentVersion 
                    $versionStr +=",,""$fieldStr""`n" 
                } 
            } 
        } 
    } 
    #Append to file: 
    Add-Content -Path $csvFile -Value $versionStr 
} 
 
$web.Dispose() 

Please let me know if you have any question. The file must be saved as .ps1 extension and can be executed
contact me on tesfaye.gari@gmail.com for any quesiton 

Thanks 
Tesfaye Gari

Leave a Reply

ADDRESS

6066 Leesburg Pike Ste 320
Falls Church, Virginia 22044
Phone: (240) 547-6851

About MTM

MTM Training and Consulting is started by a group of highly qualified and motivated Information Technology Professionals to help you boost your IT career, and your company's productivity