powershell保留最近31个文件

时间:2014-05-19 10:51:45

标签: powershell backup

我使用此powershell命令仅保留31天的备份文件。

Get-ChildItem –Path  “d:\Backup\hl” –Recurse | Where-Object{$_.LastWriteTime –lt (Get-Date).AddDays(-31)} | Remove-Item -Force -Recurse

我的问题是如果每日备份失败并且我检查备份文件夹,例如一个月后,powershell脚本将删除所有或大部分备份,因为它们比31天更早。

是否可以更改powershell命令以保留最后31个文件,具体取决于lastwritetime,但不是因为它们在31天之内?

由于

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作,我不确定这将如何使用您的recurse参数,但假设它正常工作,所以我将其留在示例中:

Get-ChildItem –Path “d:\Backup\hl” –Recurse | Sort-Object LastWriteTime –Descending | Select-Object -Skip 31 | Remove-Item -Force -Recurse

答案 1 :(得分:1)

LastWriteTime排序并跳过前31个文件。使用-Recurse时,foldernames也会出现在结果中。因此,要保留最后31个文件,您需要使用Where-Object排除文件夹项目,例如:

Get-ChildItem –Path  “d:\Backup\hl” –Recurse |
Where-Object { !$_.PSIsContainer } |
Sort-Object LastWriteTime -Descending |
Select-Object -Skip 31 |
Remove-Item -Force -Recurse