每天备份QVD文件并保存三个版本,然后再删除第一代

时间:2019-06-05 06:20:32

标签: powershell

我有一些QlikView服务器,其中包含大量需要备份的QVD文件。 这个想法是要备份三代,所以可以说该应用程序名为tesla.qvd。

如果今天对文件进行了修改,则将其命名为testa.qvd.2019-06.05。

然后它将在下次修改/写入时备份一个新的文件。

总共我想保存两代,然后再删除第一代。

这是使用PS 4.0的Windows 2012服务器

#$RemotePath = "C:\qlikview Storage\privatedata\backup\"
$LocalPath = "C:\qlikview Storage\privatedata"
$nomatch = "*\backup\*"
$predetermined=[system.datetime](get-date)
$date= ($predetermined).AddDays(-1).ToString("MM/dd/yyyy:")
Foreach($file in (Get-ChildItem -File $localpath -Recurse |  Where {$_.FullName -notlike $nomatch} -Verbose ))
{
       Copy-Item -Path $file.fullname -Destination "C:\qlikview Storage\privatedata\backup\$file.$(get-date -f yyyy-MM-dd)"

}

上面的代码将按照代码之前的文本中所述的日期备份文件。

这是我的问题,这是从这里开始的。 我尝试了谷歌和搜索论坛。 我不要求有人解决我遇到的所有问题。

但是,如果您能帮助我确定应该使用哪些功能/应该得到什么样的最终结果,它将对我有很大帮助,所以我可以继续进行下去。

In the picture you can see an example how the library looks after backup has been done. The lastwrite on the files would be same as date thou, this is fictionaly created for this question.

在图片中,您可以看到一个示例,说明备份完成后库的外观。文件上的最后写入时间将与您的日期相同,这是针对该问题而创建的。

1 个答案:

答案 0 :(得分:4)

由于您向文件添加了新的扩展名,因此可以使用备份文件夹中文件的basename属性。看起来像这样:

# Group by basename and find groups with more then 2 backups
$Groups = Get-ChildItem -Path "C:\qlikview Storage\privatedata\backup" | Group-Object basename | Where-Object {$_.Count -gt 2}
foreach ($g in $Groups) {
    $g.Group  | sort LastWriteTime -Descending | select -skip 2 | foreach {del $_.fullname -force}
}