我有一些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)"
}
上面的代码将按照代码之前的文本中所述的日期备份文件。
这是我的问题,这是从这里开始的。 我尝试了谷歌和搜索论坛。 我不要求有人解决我遇到的所有问题。
但是,如果您能帮助我确定应该使用哪些功能/应该得到什么样的最终结果,它将对我有很大帮助,所以我可以继续进行下去。
在图片中,您可以看到一个示例,说明备份完成后库的外观。文件上的最后写入时间将与您的日期相同,这是针对该问题而创建的。
答案 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}
}