Remove-Item:找不到路径' C:\ Windows \ system32 \ Microsoft.PowerShell.Commands.GroupInfo'因为它不存在

时间:2014-08-08 00:05:38

标签: powershell

我尝试执行以下命令来清除临时目录中的文件。如果特定日期有多个文件,我应该只保留最新文件。

$groups = get-ChildItem -Path "D:\Temp\Archive" -Filter "*_bak.zip" | ?{-not $_.PsIsContainer} | Group {$_.LastWriteTime.ToString("yyyy-MM-dd")}

if($groups -ne $NULL){
    ForEach ($files in $groups) {
        "Count: $($files.Count)"
        if ($files.Count -gt 1) { 
            $files | Sort LastWriteTime | Select-Object -First ($files.Count - 1) | Remove-Item -Force -WhatIf
        }
    }
}

但是,我收到以下错误。我以管理员身份执行这些命令。并且,执行策略设置为Unrestricted。

删除项目:无法找到路径' C:\ Windows \ system32 \ Microsoft.PowerShell.Commands.GroupInfo'因为它不存在 在D:\ User1 \ Tasks \ Delete_backup_files.ps1:86 char:87 + $文件|排序LastWriteTime | Select-Object -First($ files.Count - 1)| Remove-Item<<<< -Force -WhatIf     + CategoryInfo:ObjectNotFound:(C:\ Windows \ syst ... mands.GroupInfo:String)[Remove-Item],ItemNotFoundException     + FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

如果我只使用UNC路径,Remove-Item命令就可以正常工作。

$files.FullName没有价值。我怀疑这可能是个问题。但是,我不确定如何解决它。我需要分组逻辑保持原样。

我希望有人可以帮助我。

谢谢!

1 个答案:

答案 0 :(得分:2)

你其实很亲密。您必须将组中的文件传递给sort命令,而不是组本身:

$files.Group | Sort LastWriteTime | Select-Object -First ($files.Count - 1) | Remove-Item -Force -WhatIf

你得到的错误:

  

Remove-Item:找不到路径'C:\ WINDOWS \ system32 \ Microsoft.PowerShell.Commands.GroupInfo',因为它不存在。

发生因为Remove-Item需要字符串作为输入。但是您传递的是GroupInfo对象,因此PS会调用ToString()方法。 Remove-Item将结果字符串解释为位于当前位置C:\WINDOWS\system32\的文件名。