DPM 2010 PowerShell脚本轻松还原多个文件

我认为Data Protection Manager 2010是一项简单的任务,结果令人非常沮丧。 我在一台服务器上有一个文件服务器,它是保护组中唯一的服务器。 这个文件服务器是文件pipe理应用程序的存储库,它根据SQL数据库中的数据存储文件。 有时用户不小心删除了我们的应用程序中的文件,我们需要恢复它们。 我们拥有恢复文件所需的全部信息,包括文件名,文件存储的文件夹以及文件被删除的确切date。 我很容易从DPM控制台中恢复文件,因为我们每天都创build一个恢复点,我只需要在删除前一天浏览到正确的文件夹并恢复文件。 问题是,使用DPM控制台,繁琐的向导需要大约20次鼠标点击来恢复单个文件,并需要2-4分钟才能通过所有的窗口。 当客户端需要恢复100个文件时,这变得非常烦人…需要花费一整天的冗余鼠标来恢复文件。

因此,我想使用PowerShell脚本(并且我是PowerShell的新手)来自动执行此过程。 我希望能够创build一个脚本,我传递一个文件名,一个文件夹,一个恢复点date(和一个保护组/服务器名称,如果需要的话),并简单地将文件恢复到原来的位置与某种成功/失败通知。 我认为这是一个简单的备份解决scheme的基本任务,但我有一段时间find正确的代码。

我已经看到http://social.technet.microsoft.com/wiki/contents/articles/how-to-use-a-windows-powershell-script-to-recover-an-item-in-data上的示例代码-protection-manager.aspx ,我试图遵循,但它并没有达到我真正想要做的(这太简单了),并在示例代码中有错误。 因此,我想获得一些帮助,编写一个脚本来恢复这些文件。

恢复数据的已知值的示例如下:

DPM Server: BACKUP01 Protection Group: Document Repository Data Protected Server: FILER01 File Path: R:\DocumentRepository\ToBackup\ClientName\Repository\2010\07\24\filename.pdf Date Deleted: 8/2/2010 (last recovery point = 8/1/2010) 

奖励积分:

如果您不仅可以帮助我创build此脚本,还可以通过提供具有PowerShell脚本循环或甚至更好的以上信息的文本文件来向我展示如何自动化,以便能够查询我们的SQL Server以获取所需的数据,那么我愿意为这个发展付出代价。

那么经过多次的挫折和研究之后,我想出了一个工作脚本。 对于那些想知道如何做同样的事情,下面的脚本很好地恢复任何给定的文件。

 <# Parameters: Folder Path, File to Restore, Deletion Date Example Usage: .\RecoverFile.ps1 "ClientName\Folder\2010\02\03\" "mydoc.pdf" "2010-08-04 09:54:24.117" #> $filePath = [IO.Path]::Combine("D:\ClientData\", $args[0] ) $fileName = $args[1] $dateDeleted = Get-Date $args[2] Write-Host "Restoring '" -NoNewLine Write-Host $filePath -NoNewLine Write-Host $fileName -NoNewLine Write-Host "' which was deleted on '" -NoNewLine Write-Host $dateDeleted -NoNewLine Write-Host "'" $recoveryDate = Get-Date $dateDeleted.AddDays(-1).ToShortDateString() $pg = Get-ProtectionGroup -DPMServerName DPMSERVER01 | Where-Object {$_.FriendlyName -eq "Document Repository Data"} $ds = Get-Datasource $pg $so = New-SearchOption -FromRecoveryPoint $recoveryDate.AddDays(-1).ToShortDateString() -ToRecoveryPoint $recoveryDate.ToShortDateString() -SearchDetail FilesFolders -SearchType exactMatch -Location $filePath -SearchString $fileName $ri = Get-RecoverableItem -Datasource $ds -SearchOption $so $ro = New-RecoveryOption -TargetServer CLIENTDATASERVER01 -RecoveryLocation OriginalServer -FileSystem -OverwriteType overwrite -RecoveryType Recover $recoveryJob = Recover-RecoverableItem -RecoverableItem $ri -RecoveryOption $ro #4.3 Wait till the recovery job completes while (! $recoveryJob.hasCompleted ) { # Show a progress bar Write-Host "." -NoNewLine Start-Sleep 1 } if($recoveryJob.Status -ne "Succeeded") { Write-Host "Recovery failed" -ForeGroundColor Red } else { Write-Host "Recovery successful" -ForeGroundColor Green }