The Script below will list the version status of every site in your farm.
Note that as the script is below, it only reports, you’ll need to uncomment 3 lines if you want it to make the changes.
It’s a good idea to run the script once or twice before you do that, so you have a log of what settings were.
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue $timestamp = get-date -format "yyyMMdd_hhmmtt" $filenameprefix = "VersionScriptoutput" $logfile = ("{0}_{1}.csv" -f $filenameprefix, $timestamp) $header = "ListURL,Enabled" $header | out-file -filepath $logfile # tip - the script as is will pull every sharepoint site (at the IIS level) in your farm. # if you want to filter this to a single IIS site, # remove the # from the middle of the next line and enter your site's url $iissitelist = get-spwebapplication # | where {$_.url -eq "https://www.yoursite.com/"} foreach ($iissite in $iissitelist) { foreach ($SiteCollection in $iissite.sites) { write-host $SiteCollection -foregroundcolor Blue foreach ($oneweb in $SiteCollection.allwebs) { write-host $oneweb.url -foregroundcolor Green #now this is is where we look at the lists $lists = $oneweb.lists foreach ($list in $lists) { if($list.EnableVersioning -eq $false) { write-host "$($iissite.url)$oneweb/$list is a not using versions" -foregroundcolor yellow $msg = "$($oneweb.url),$($list.rootfolder)" $msg | out-file -filepath $logfile -append # note! # if you actually want to make the changes, uncomment the next 3 lines! #$list.Enableversioning = $true #$List.MajorVersionLimit = 3 #$list.update() } else { Write-host "$($oneweb.url)/$($list.RootFolder) has versions enabled! " -foregroundcolor green $msg = "$($oneweb.url)/$($list.rootfolder),true" $msg | out-file -filepath $logfile -append } } } } }
One thought on “Enable Versions on every SharePoint Site with PowerShell (updated with logging)”