Search This Blog

Thursday, July 16, 2015

Get SharePoint List Item Version History

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


$web  = Get-SPWeb http://pravahaminfo.com/web 
$list = $web.Lists["Document Library"] # Name of the List?library
$csvFile = "C:\ListItemVersionHistory.csv" # Save folder Location

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 "<div></div>")) 
                { 
                    $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 "<div></div>")) 
                { 
                    $fieldStr = GetFieldValue $field $currentVersion 
                    $versionStr +=",,""$fieldStr""`n" 
                } 
            } 
        } 
    } 
    #Append to file: 
    Add-Content -Path $csvFile -Value $versionStr 

$web.Dispose() 

Ref:https://gallery.technet.microsoft.com/office/Test-bb3ed1ca

No comments:

Post a Comment