我目前是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中运行。
当命令工作时,它将被"翻译"在另一个任务完成备份后,每晚都会运行一个任务。
答案 0 :(得分:2)
我在管道中做到了
Get-ChildItem C:\temp | ? { $_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit } | Remove-Item -WhatIf
这对我有用。因此,您无需关注文件的正确路径。
答案 1 :(得分:1)
其他解决方案
$timeLimit = (Get-Date).AddDays(-1)
Get-ChildItem C:\temp2 -Directory | where LastWriteTime -lt $timeLimit | Remove-Item -Force -Recurse
答案 2 :(得分:0)
原始问题是$dest\$backup
会假设每个文件都在根文件夹中。但是,通过在fullname
上使用$backup
属性,您无需静态定义目录。
另一个注意事项是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