DPM 2010 PowerShell 脚本可轻松恢复多个文件

DPM 2010 PowerShell 脚本可轻松恢复多个文件

我原本以为使用 Data Protection Manager 2010 会是一项简单的任务,但结果却令人沮丧。我在一台服务器上有一个文件服务器,它是保护组中唯一的服务器。此文件服务器是文档管理应用程序的存储库,它根据 SQL 数据库中的数据存储文件。有时用户会无意中删除我们应用程序内的文件,我们需要恢复它们。我们拥有恢复文件所需的所有信息,包括文件名、存储文件的文件夹以及删除文件的确切日期。我可以轻松地从 DPM 控制台中恢复文件,因为我们每天都会创建一个恢复点,我只需转到删除前一天,浏览到正确的文件夹并恢复文件即可。问题是使用 DPM 控制台,繁琐的向导需要大约 20 次鼠标点击才能恢复单个文件,并且需要 2-4 分钟才能浏览完所有窗口。当客户需要恢复数百个文件时,这会变得非常令人恼火......需要花一整天的时间重复点击鼠标才能恢复这些文件。

因此,我想使用 PowerShell 脚本(我是 PowerShell 新手)来自动化此过程。我希望能够创建一个脚本,传入文件名、文件夹、恢复点日期(以及保护组/服务器名称(如果需要)),然后只需将文件还原回其原始位置并发出某种成功/失败通知即可。我以为这是备份解决方案的一项简单基本任务,但我花了很长时间才找到正确的代码。

我已经看到了示例代码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)

奖励积分:

如果您不仅能帮助我创建此脚本,还能向我展示如何通过提供包含上述信息的文本文件(PowerShell 脚本会循环遍历这些文本文件)来实现自动化,或者更好的是,能够查询我们的 SQL 服务器以获取所需的数据,那么我会非常愿意为此开发付费。

答案1

好吧,经过多次挫折和研究,​​我终于想出了一个可行的脚本。对于那些想知道如何做同样事情的人来说,下面的脚本可以很好地恢复任何给定的文件。

<#
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
}

相关内容