Clear-RecycleBin cmdlet 的进度条输出显示不正确

Clear-RecycleBin cmdlet's progress bar output is shown incorrectly

我是第一次使用 Clear-RecycleBin cmdlet,很明显这个 cmdlet 绘制了一个典型的命令行进度条,我认为它应该用符号或颜色块填充从头到尾,或者它应该只在栏的中间打印一个百分比值,我不完全知道,因为正如我所说的,这是我第一次使用这个 cmdlet,但是,看到它下面的图像很明显进度条输出是错误的。进度条完全是 "static",它不会填满进度条,它只会(一次)打印几个字符,不会继续打印更多字符,如图所示:

我通过将数千个文件发送到回收站来多次测试 cmdlet,这样我强制 cmdlet 花时间(以分钟为单位)完成回收操作,我注意到这并不重要此 cmdlet 运行时经过了很多时间,进度条输出始终相同。仅打印该数量的 "o" 个字符,并且立即打印,而不是渐进打印。

我想可能是某种输出编码问题,否则这个奇怪的进度条输出对我来说似乎莫名其妙...

我不确定哪里出了问题。这就是我 运行 这个 cmdlet 的方式:

PowerShell.exe -command "[console]::WindowWidth=40; [console]::WindowHeight=6; [console]::BufferWidth=[console]::WindowWidth; Clear-RecycleBin -DriveLetter 'C' -Force -ErrorAction SilentlyContinue; Start-Sleep -Second 2"

我的问题是:为什么我有这个输出,我该如何解决它?

why I'm having this output and how do I fix it?.

你有这个输出是因为 Clear-RecycleBin 的作者故意欺骗你,你无法真正做任何事情来修复它。

Clear-RecycleBin 基本上执行以下操作:

  1. 准备状态消息
  2. Set Progress to 30%
  3. 致电shell32.dll!SHEmptyRecycleBin()
  4. 将进度设置为 100%

SHEmptyRecycleBin() 的调用是阻塞调用(即控制权只会在完成时返回给调用者),并且 cmdlet 实际上无法将正在进行的进度传递回调用者,因为shell32.dll 中的进度 UI 在设计上与桌面 shell 紧密集成,并非真正设计用于在任何其他上下文中使用或检测。