The Restore-Version function has three parameter sets: SpecificVersion (-VersionLabel), LatestMinor (-LatestMinor) and LatestMajor (-LatestMajor). It expects to receive the URL of a SharePoint Web (or a SPWeb object from the pipeline) along with a document library to update. If a specific version is specified, that version is restored as the latest published version for all documents. If latest minor or major is selected, that version is published for all documents. In either case, all other versions are deleted.

There are a number of error-checking and confirmation messages included as can be seen in the function.

PowerShell
Edit|Remove
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue 
 
function Restore-Version { 
[CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact="High",DefaultParameterSetName="SpecificVersion")] 
param( 
    [Parameter(ParameterSetName="SpecificVersion",Mandatory=$true)] 
    [ValidatePattern('^\d+\.\d+$')] 
    [String] 
    $VersionLabel, 
    [Parameter(ParameterSetName="LatestMinor")] 
    [Switch] 
    $LatestMinor, 
    [Parameter(ParameterSetName="LatestMajor")] 
    [Switch] 
    $LatestMajor, 
     
    [Parameter(Mandatory=$true)] 
    [Microsoft.SharePoint.PowerShell.SPWebPipeBind] 
    $Web, 
    [Parameter(Mandatory=$true)] 
    [String] 
    $LibraryName 
) 
 
$WebRead = $Web.Read() 
$list = $WebRead.Lists[$LibraryNameforeach ( $item in $list.Items ) { 
    # note: The latest version of the file is stored directly on the SPFile object. 
    # Previous versions are stored as a SPFileVersionCollection at SPFile.Versions 
    # This means that the current 'live' version is not part of the version collection. 
     
    #region VersionLabel Setup 
 
    # Check if the version number requested exists in the Versions collection for this file. 
    # It might not if it's the current UI version - in which case we still want to delete the old versions, so don't just 'continue'. 
    if ($PSCmdlet.ParameterSetName -eq "SpecificVersion" ) { 
        if ((-not ($item.File.Versions.GetVersionFromLabel($VersionLabel))) -and (-not ($item.File.UIVersionLabel -eq $VersionLabel))) { 
            Write-Warning "Version $VersionLabel not found for $($item.Url); Skipping"continue 
        } 
    } 
    # Set the correct version for LatestMinor and LatestMajor switches 
    if ($LatestMinor.IsPresent) {$VersionLabel = $item.File.UIVersionLabel}   #absolute latest version 
    if ($LatestMajor.IsPresent) {$VersionLabel = "{0}.0" -$item.File.MajorVersion}   #latest published (major) version 
    #endregion 
     
    #restore indicated version if necessary 
    $strInfo = "URL={0}, VersionToRestore={1}" -$item.Url,$VersionLabel 
    if ((-not ($item.File.UIVersionLabel -eq $VersionLabel)) -and ($PSCmdlet.ShouldProcess( $strInfo"Restore version" ))) { 
        $item.File.Versions.RestoreByLabel($VersionLabel) 
    } 
     
    #if library supports minor versioning and latest version is minor, publish major version. 
    if ($item.File.MinorVersion) { 
        $item.File.Publish("Copy of version: $VersionLabel") 
    } 
     
    #delete all but the current (major) version 
    if ($PSCmdlet.ShouldProcess($item.Url, "Delete other versions")) { 
        $item.File.Versions.DeleteAll() 
    } 
 
} #end foreach 
} #end function Restore-Version 
 
 
$WebUrl = "http://sharepoint10/subsite" 
$LibraryName = "Shared Documents" 
$VersionToRestore = "1.0" 
 
Restore-Version -VersionLabel $VersionToRestore -Web $WebUrl -LibraryName $LibraryName -Confirm:$false -Verbose