【发布时间】:2016-10-28 22:34:24
【问题描述】:
我目前是 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 中运行。
当命令起作用时,它将被“翻译”成一个任务,该任务将在另一个任务完成备份某些内容后每晚运行。
【问题讨论】:
-
2) 如果要删除文件,为什么只包括带有
$PSIsContainer的文件夹? 3) 如果那是您的脚本,那么 $dest 来自哪里?如果未定义,gci 将读取当前工作目录而不会出错。 4) 你确认$oldBackups里面有什么吗? 5)Remove-Item是否会抛出任何关于文件不存在的异常? -
$dest 在上面的外部范围中声明。它是脚本的工作目录。在那里创建备份。不,不会抛出异常。关于 $PSIsContainer,你是对的。我们决定备份不会在文件夹中,它们将直接在工作目录中,所以基本上备份将在 mysqldump 输出的模式 backup_cap_dateOfWrite 下。