![](/img/trans.png)
[英]Delete files and folders older than x days in remote windows server using windows powershell
[英]Windows PowerShell - Delete Files Older than X Days
我目前是PowerShell的新手,我已基于网上收集的信息创建了一个脚本,该脚本将对LastWriteTime少于1天的文件夹中的已找到文件执行删除操作。
当前脚本如下:
$timeLimit = (Get-Date).AddDays(-1)
$oldBackups = Get-ChildItem -Path $dest -Recurse -Force -Filter "backup_cap_*" |
Where-Object {$_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit}
foreach($backup in $oldBackups)
{
Remove-Item $dest\$backup -Recurse -Force -WhatIf
}
据我所知, -WhatIf
命令将向控制台输出命令在实际情况下应执行的操作。 问题是-WhatIf
不会输出任何内容,即使我将其删除,也无法按预期删除文件。
该服务器是Windows 2012 R2,并且该命令正在PowerShell ISE V3中运行。
当命令生效时,它将被“翻译”为一个任务,该任务将在另一个任务完成一些备份之后每晚运行。
我是在烟斗里做的
Get-ChildItem C:\temp | ? { $_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit } | Remove-Item -WhatIf
这对我有用。 因此,您不必照顾文件的正确路径。
其他解决方案
$timeLimit = (Get-Date).AddDays(-1)
Get-ChildItem C:\temp2 -Directory | where LastWriteTime -lt $timeLimit | Remove-Item -Force -Recurse
最初的问题是$dest\\$backup
假定每个文件都在根文件夹中。 但是,通过在$backup
上使用fullname
属性,您无需静态定义目录。
另一个要注意的是,Remove-Item接受字符串数组,因此您也可以摆脱foreach
这是您脚本的修复程序,无需使用管道。 请注意,由于我使用了where
方法,因此至少需要版本4
$timeLimit = (Get-Date).AddDays(-1)
$Backups = Get-ChildItem -Path $dest -Directory -Recurse -Force -Filter "backup_cap_*"
$oldBackups = $backups.where{$_.LastWriteTime -lt $timeLimit}
Remove-Item $oldBackups.fullname -Recurse -Force -WhatIf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.