删除X个文件数X个旧天数-Powershell

删除X个文件数X个旧天数-Powershell,powershell,Powershell,我有这个脚本,可以删除文件超过4天。但是,我想控制它应该删除4天前的X个文件+文件夹,还想获得日志,以便我以后看到它。 下面是脚本,可以吗 Get-ChildItem –Path “H:\backups” –Recurse | Where-Object{$_.CreationTime –lt (Get-Date).AddDays(-4)} | Remove-Item 我相信这会起作用,允许您通过一条路径和您希望保留的天数作为参数: $Now = Get-Date $Days = "4" $

我有这个脚本,可以删除文件超过4天。但是,我想控制它应该删除4天前的X个文件+文件夹,还想获得日志,以便我以后看到它。 下面是脚本,可以吗

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

我相信这会起作用,允许您通过一条路径和您希望保留的天数作为参数:

$Now = Get-Date
$Days = "4"
$TargetFolder = "H:\backups"
$LastWrite = $Now.AddDays(-$days)
$Files = get-childitem $TargetFolder -include *.*  -recurse -force
     Where {$_.CreationTime -le "$LastWrite"} 
    foreach ($i in Get-ChildItem $TargetFolder -recurse)
{
    if ($i.CreationTime -lt ($(Get-Date).AddDays(-10)))
    {
        Remove-Item $Files -recurse -force
    }
}
    Write-Output $Files >> c:\delete.log
我还建议,与其删除比给定时间段早的文件,不如删除比最近X个文件数早的文件。这样,您可以始终保留一定数量的文件,而不会在备份无法运行数天的情况下删除所有文件。这可能是一个选项,具体取决于文件夹结构的设置方式(修改filefilter参数,以便删除的内容不会超出预期)


在原始命令上,添加以下内容:

function RemoveOlder($path, $filefilter, $filestokeep)
{
    $findfiles = @(Get-ChildItem -Path $path -Include $filefilter)
    if ($findfiles.Count -gt $filestokeep) {
        $findfiles | Sort-Object LastWriteTime -Descending | Select-Object -Last ($findfiles.Count - $filestokeep) | Remove-Item
    }
}

RemoveOlder -path "H:\backups\*" -filefilter "*" -filestokeep 4
4
是详细输出,因此这是将详细重定向到标准输出
1
,然后将两者重定向到日志文件。最后的命令是:

 -Verbose 4>&1 | Out-File -FilePath D:\delete.log -Append
更新:如果希望命令在没有交互的情况下运行,并在出现错误等情况下继续执行计划任务,请向
删除项添加其他参数

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

它好吗?你是在问它是否有效吗?您可以通过使用测试文件在测试目录上测试脚本来自己发现这一点?如何获得以下脚本中删除的文件的输出。Get ChildItem–路径“H:\backups”-递归| Where Object{$\uu0.CreationTime–lt(Get Date).AddDays(-4)}|删除项目在删除之前输出文件名。Hi@justin它将仅保留4个文件+文件夹还是根据修改日期保留新文件?@jacksh使用该代码示例将根据修改日期仅保留四个最新文件(
LastWriteTime
)并删除那些较旧的脚本。此脚本很好,但当我运行时,它会一直弹出并请求确认是否可以跳过我们需要从任务计划程序中计划它
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
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