【问题标题】:Remove-Item : Cannot find path 'C:\Windows\system32\Microsoft.PowerShell.Commands.GroupInfo' because it does not exist删除项目:找不到路径“C:\Windows\system32\Microsoft.PowerShell.Commands.GroupInfo”,因为它不存在
【发布时间】:2014-08-08 00:05:37
【问题描述】:

我正在尝试执行以下命令来清除临时目录中的文件。如果某一天有多个文件,我应该只保留最新的文件。

$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
        }
    }
}

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

Remove-Item:找不到路径“C:\Windows\system32\Microsoft.PowerShell.Commands.GroupInfo”,因为它不存在。 在 D:\User1\Tasks\Delete_backup_files.ps1:86 char:87 + $文件 |排序 LastWriteTime |选择对象-First ($files.Count - 1) |删除项目

Remove-Item 命令在我使用 UNC 路径时可以正常工作。

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

希望有人能帮帮我。

谢谢!

【问题讨论】:

  • system32下删除文件失败其实是好事!

标签: powershell


【解决方案1】:

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

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

你得到的错误:

删除项目:找不到路径“C:\WINDOWS\system32\Microsoft.PowerShell.Commands.GroupInfo”,因为它不存在。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2015-01-19
    • 2011-09-30
    相关资源
    最近更新 更多