You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell脚本中捕获Remove-Item错误并记录未删除文件

修正后的PowerShell脚本
$totalSize = 0
$failedDeletions = @()

$results = Get-ChildItem -Path $searchRoot -Filter *.log -Recurse | ForEach-Object {
    $file = $_
    $deleteError = $null
    $sizeMB = [math]::Round($file.Length / 1MB, 2)
    $totalSize += $file.Length

    # 尝试删除文件并捕获错误
    try {
        Remove-Item -Path $file.FullName -Force -Verbose -ErrorAction Stop
        $deleteStatus = "成功"
    }
    catch {
        $deleteError = $_.Exception.Message
        $deleteStatus = "失败"
        # 将删除失败的文件信息存入单独变量
        $failedDeletions += [PSCustomObject]@{
            Name          = $file.Name
            FullName      = $file.FullName
            "Size (MB)"   = $sizeMB
            LastWriteTime = $file.LastWriteTime
            ErrorMessage  = $deleteError
        }
    }

    # 返回包含删除状态的文件信息
    $file | Select-Object -Property Name,
                                   FullName,
                                   @{n='Size (MB)'; e={$sizeMB}},
                                   LastWriteTime,
                                   @{n='删除状态'; e={$deleteStatus}},
                                   @{n='错误信息'; e={$deleteError}}
}

# 输出所有文件的处理结果
$results

# 输出总文件大小(格式化显示为MB)
"所有日志文件总大小: {0:N2} MB" -f ($totalSize / 1MB)

# 若存在删除失败的文件,单独输出
if ($failedDeletions.Count -gt 0) {
    "`n删除失败的文件列表:"
    $failedDeletions | Format-Table -AutoSize
}

关键修改说明

1. 整合删除错误信息到结果属性

  • 添加了两个计算属性:删除状态(标记成功/失败)和错误信息(失败时显示具体错误内容,成功时为$null)
  • 使用try/catch块配合-ErrorAction Stop强制将Remove-Item的非终止错误转为终止错误,确保能捕获所有删除失败的情况

2. 存储删除失败的文件到单独变量

  • 初始化$failedDeletions数组,在删除失败时将文件的完整信息(名称、路径、大小、修改时间、错误信息)以自定义对象形式存入该变量
  • 脚本末尾会自动检查并输出所有删除失败的文件列表

内容的提问来源于stack exchange,提问作者Senior Systems Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:23:39