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

PowerShell访问回收站单条对象耗时3秒的原因排查求助

排查PowerShell访问回收站对象耗时过长的问题

我整合了之前的两段示例脚本,修订了问题。以下PowerShell代码会访问回收站中前10条项目,并将其原始文件名和路径输出到CSV文件。代码可正常运行,但每次获取回收站中单个项目对象时,耗时约3-4秒;统计回收站项目总数时耗时也相近。延迟仅源于访问回收站对象的操作,一旦对象打开,后续操作耗时可忽略。另外我有个疑问:我无法通过管道提速,因为GetDetailsOf()方法需要每个回收站项目的独立对象作为输入参数,这个理解是否有误?有没有管道实现的方式?

已有其他用户反馈运行该代码(本次编辑前的分段版本)时,访问单条项目耗时可忽略,因此问题并非出自代码,而是我的计算机访问回收站对象时存在异常。

$oShell = New-Object -com shell.application
$ssfBitBucket = 10
$oRecycleBin = $oShell.Namespace($ssfBitBucket)
$aasBin = New-Object System.Collections.ArrayList

$dTimeAllStart = $(get-date)

echo ""
$dTimeCountBinStart = $(get-date)
echo ("Count of recycle bin objects = " + $oRecycleBin.Items().count)
echo ("Elapsed time on count of bin: " + ($(get-date) - $dTimeCountBinStart) + ".")

for ($nCount = 0 ; $nCount -lt 10 ; $nCount++)
   {$dTimeAccessOneItemStart = $(get-date)
    $oRBItem = $oRecycleBin.Items().Item($nCount)
    echo ("Elapsed time on item " + $nCount + ": " + ($(get-date) - $dTimeAccessOneItemStart) + ".")
    $asBinItem = New-Object PsObject -property `
        @{'Name'             = $oRecycleBin.GetDetailsOf($oRBItem, 0)
          'OriginalLocation' = $oRecycleBin.GetDetailsOf($oRBItem, 1)}
    $aasBin.add($asBinItem)
    echo $oRBItem.Name
    }

$aasBin `
    | select Name, OriginalLocation `
    | Export-Csv -Path $sOutputFilespec -NoTypeInformation

out-file -InputObject ("") -FilePath $sOutputFilespec -append

$dTimeAllEnd = $(get-date)
$dTimeAllElapsed = $dTimeAllEnd - $dTimeAllStart 
$sTimeAllElapsed = $dTimeAllElapsed.ToString("hh\:mm\:ss")
echo ("Elapsed time: " + $sTimeAllElapsed + ".")

这段代码是我计划用于全量处理回收站脚本的精简版本。我的回收站现有17000条项目,若单条耗时3秒,总耗时将达14小时,显然过长。

额外现象

  • 若在进行其他操作后返回运行该脚本,或重启电脑后无其他负载时运行,首次访问耗时约7秒
  • 若保留统计回收站总数的代码段,该统计操作耗时约7秒,其余操作耗时3-4秒
  • 若不统计总数,则首次访问项目耗时约7秒,后续耗时3-4秒
  • 无论是否统计总数,若在刚运行完后立即再次运行,所有操作耗时均为3-4秒

已排查信息

  • 运行代码时,任务管理器未显示内存占用显著上升
  • 测试的10条项目大小为15KB至5.5MB,均存储于本地同一SSD;除一条外,其余原始路径均在同一文件夹;删除日期为2021年4月至2022年11月;某次测试中,访问耗时介于3.0至3.8秒
  • 回收站仅17189条项目,NTFS通常在文件数超10万时才会出现性能问题,因此排除该因素

编辑2:为排查是否由网络安全软件SentinelOne导致延迟,我断开网络并禁用SentinelOne代理后再次运行脚本,耗时略有变化,但无明显改善。

请问如何排查我的计算机中导致回收站对象访问耗时数秒的原因?


内容的提问来源于stack exchange,提问作者NewSites

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:20:33