删除X个文件X旧日--Powershell

时间:2016-01-20 22:34:11

标签: powershell

01-20 16:21:23.184: D/WTF(2150): Communications link failure
01-20 16:21:23.184: D/WTF(2150): The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

我有此脚本可以删除超过4天的文件。但是我想控制它应该删除4天以上的X个文件+文件夹,并且还想获取日志以便我稍后看到它。 下面是剧本,没事吗?

Get-ChildItem –Path  “H:\backups” –Recurse | Where-Object{$_.CreationTime –lt (Get-Date).AddDays(-4)} | Remove-Item 

2 个答案:

答案 0 :(得分:0)

我相信这会有效,允许你传递路径和你想要保留的天数作为参数:

byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);

我还建议,不要删除超过给定时间范围的文件,而是删除早于最新X个文件的文件。通过这种方式,您可以始终保留一定数量的文件,如果备份以某种方式无法运行数天,则最终会导致所有文件都被删除。它可能是一个选项,具体取决于您的文件夹结构的设置方式(修改filefilter参数,以便您不要删除超过所需的文件)。

function RemoveOld($path, $filefilter, $daystokeep)
{
    $findfiles = @(Get-ChildItem -Path $path -Include $filefilter)
    $toRemove = $findfiles | Where-Object CreationTime -le (Get-Date).AddDays(-$daystokeep)
    $toRemove >> c:\temp\delete.log
    $toRemove | Remove-Item
}

RemoveOld -path "H:\backups\*" -filefilter "*" -daystokeep 4

答案 1 :(得分:0)

在原始命令中,添加:

 -Verbose 4>&1 | Out-File -FilePath D:\delete.log -Append

4是详细输出,因此这会将Verbose重定向到stdout 1,然后将两者重定向到日志文件。最后的命令是:

Get-ChildItem –Path  “H:\backups” –Recurse `
 | Where-Object{$_.CreationTime –lt (Get-Date).AddDays(-4)} `
 | Remove-Item -Verbose 4>&1 | Out-File -FilePath C:\delete.log -Append

更新:如果您希望命令在没有交互的情况下运行并继续执行计划任务的错误等,请将其他参数添加到Remove-Item

Get-ChildItem –Path  “H:\backups” –Recurse `
   | Where-Object{$_.CreationTime –lt (Get-Date).AddDays(-4)} `
   | Remove-Item -Verbose -Force -ErrorAction SilentlyContinue -Confirm:$false 4>&1 `
   | Out-File -FilePath C:\delete.log -Append