当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 还原文档的早期版本

作者:精品下载站 日期:2024-12-14 14:17:54 浏览:15 分类:玩电脑

SharePoint Online:使用 PowerShell 还原文档的早期版本


要求:在 SharePoint Online 中恢复文档的先前版本。

如何在 SharePoint Online 中恢复文档或项目的先前版本?

当错误地进行更改时,您可能想要恢复以前的版本,并且需要恢复到早期的状态。要恢复文档或列表项的早期版本,请执行以下步骤:

  1. 导航到您的 SharePoint Online 文档库,其中包含要还原以前版本的文件。
  2. 右键单击文件查看版本历史记录 >> 从弹出的上下文菜单中,选择“版本历史记录”菜单项。
  3. 选择要恢复的版本:在版本历史记录页面上,将鼠标悬停在要恢复的版本的“修改”日期上,然后单击箭头图标以获取其上下文菜单。
  4. 单击“恢复”并按“是”确认提示即可恢复文档的特定版本。

    [玩转系统] SharePoint Online:使用 PowerShell 还原文档的早期版本

最好查看/下载特定版本,以确保您恢复正确的版本。恢复版本操作会创建一个新版本 - 这意味着您在执行此过程时永远不会丢失任何版本。

SharePoint Online:使用 PowerShell 还原文档库中所有项目的先前版本

虽然在 SharePoint Online 中恢复以前的版本非常简单,但让我们使用 PowerShell 恢复文档库中所有文档的以前版本。


#Import SharePoint Online module
Import-Module Microsoft.Online.SharePoint.Powershell

Function Restore-PreviousVersion()
{
  param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ListName
    )
   Try {
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
        
        #Get all items from the list/library
        $Query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()
        $List = $Ctx.Web.Lists.GetByTitle($ListName)
        $Ctx.Load($List)
        $ListItems = $List.GetItems($Query)
        $Ctx.Load($ListItems)
        $Ctx.ExecuteQuery()

        #Iterate through each item and restore the previous version
        Foreach($Item in $ListItems)
        { 
            #Get the file versions
            $File = $Ctx.Web.GetFileByServerRelativeUrl($Item["FileRef"])
            $Ctx.Load($File)
            $Ctx.Load($File.Versions)
            $Ctx.ExecuteQuery()

            If($File.Versions.Count -gt 0)
            {
                #Get the previous version's label
                $VersionLabel=$File.Versions[($File.Versions.Count-1)].VersionLabel

                #Restore the previous version
                $File.Versions.RestoreByLabel($VersionLabel)
                $Ctx.ExecuteQuery()
                Write-Host -f Green "Previous version $VersionLabel Restored on :" $Item["FileRef"]
            }
            Else
            {
                Write-host "No Versions Available for "$Item["FileRef"] -f Yellow
            }
        }
     }
    Catch {
        write-host -f Red "Error Removing User from Group!" $_.Exception.Message
    }
} 

#Set parameter values
$SiteURL="https://crescent.sharepoint.com"
$ListName="Documents"

#Call the function to restore previous document version
Restore-PreviousVersion -SiteURL $SiteURL -ListName $ListName

当您恢复列表项或文档的先前版本时,该版本将成为当前版本。

PnP PowerShell 恢复文件的先前版本

要恢复文件的先前版本,请使用 Restore-PnPFileVersion cmdlet:


#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Retail"
$FileURL = "/sites/Retail/Shared Documents/Invoice-ID-022.xlsx" #Server Relative URL

#Connect to SharePoint Online Site
Connect-PnPOnline -Url $SiteURL -Interactive
 
#Remove previous version with version Label or ID 
Restore-PnPFileVersion -Url $FileURL -Identity "1.0" -Force

如果您不小心覆盖了文件,或者需要恢复到文档的旧版本,这会很有用。使用此 PnP PowerShell 脚本可还原 SharePoint Online 文档库中所有文件的先前文档版本:


#Function to Restore Previous Versions of all Files in a Library
Function Restore-PreviousVersion
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)][Microsoft.SharePoint.Client.List]$Library
    )

    Begin
    {
        $BatchSize = 2000
        $global:Counter = 0
    }
    Process
    {
        #Get All Files from the Library in batches
        $AllItems = Get-PnPListItem -List $Library -PageSize $BatchSize -Fields ID -ScriptBlock { Param($items) $global:counter += $items.Count; `
                Write-Progress -PercentComplete ($global:Counter / ($Library.ItemCount) * 100) -Activity "Getting List Items of '$($_.Title)'" `
                     -Status "Processing Items $global:Counter to $($Library.ItemCount)";}  | Where {$_.FileSystemObjectType -eq "File"}
        Write-Progress -Activity "Completed Retrieving Items from List $($Library.Title)" -Completed
        
        #Process All Files from the Library
        $global:Counter = 1
        ForEach($Item in $AllItems)
        {
            #Get File and Versions from the List Item
            Get-PnPProperty -ClientObject $Item -Property File | Out-Null
            Get-PnPProperty -ClientObject $Item.File -Property Versions | Out-Null

            If($Item.File.Versions.Count -gt 0)
            {
                #Get the previous Version's Label
                $VersionLabel = $Item.File.Versions[$Item.File.Versions.Count-1].VersionLabel

                Write-Host "$(Get-Date) - ($($Counter)/$($AllItems.Count)) - Restoring version $VersionLabel for $($Item.File.Name)"
                $item.File.Versions.RestoreByLabel($VersionLabel)
                Invoke-PnPQuery
            }
            else
            {
                Write-Host "$(Get-Date) - ($($Counter)/$($AllItems.Count)) - Skipping $($Item.File.Name) as there are no previous versions!"
            }
            $Counter++
        }
    }
    end
    {
    }
}

#Set Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/Projects"
$ListName = "Documents"

#Connect to SharePoint Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Get the Library
$Library = Get-PnPList -Identity $ListName

#Call the function to Restore Previous Versions of all files
$Library | Restore-PreviousVersion

恢复以前的版本可以帮助您恢复丢失或删除的内容并恢复到文档的旧版本。这是我关于 SharePoint On-Premises 使用 PowerShell 还原文件的先前版本的另一篇文章:如何使用 PowerShell 还原文件的先前版本?

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯