将Remove-Item输出到日志文件

时间:2015-08-03 20:57:35

标签: powershell

扫描目录以查找特定文件集并按日期对其进行排序。无论日期如何,保留7个最新的文件副本,如果超过7,则删除最旧的副本。我很难生成显示删除的日志文件,因为Remove-Item没有输出。

以下是我的代码的副本:

$path = "C:\- Deploy to Production -\Previous Deploys\*_*_BOAWeb.rar" #BOA 
$files = Get-ChildItem -Path $path -Recurse | Where-Object {-not $_.PsIsContainer}
$keep = 7
if ($files.Count -gt $keep) {
  $files | Sort-Object CreationTime |
    Select-Object -First ($files.Count - $keep) |
    Remove-Item -Force 
}

1 个答案:

答案 0 :(得分:6)

首先,你已经结束了复杂化的事情。将-Descending添加到Sort命令,然后将Select更改为-Skip $keep。这样简单。然后,您可以选择输出已删除的文件。

Remove-Item -Force -Verbose 4>&1 | Add-Content C:\Path\To\DeletedFiles.log

或(保持上面的当前代码)

Select-Object  -First ($files.Count - $keep) |Tee-Object -filepath C:\Path\To\DeletedFiles.log -append

第一个将输出Delete-Item的详细输出,并将其附加到指定路径的任何日志文件中(如果要替换日志,请使用Set-Content)。第二个选项会将[FileInfo]个对象附加到您指定的日志中。

编辑正如Ansgar Wiechers所指出的那样,我忘记了将详细和stdout流组合在一起,因此4>&1被添加到上面的代码中来纠正这个问题。