首页 > 解决方案 > Clear-RecycleBin cmdlet 的进度条输出显示不正确

问题描述

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

在此处输入图像描述

我通过将数千个文件发送到回收站来多次测试 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"

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

标签: powershellcmdletscmdletpscmdlet

解决方案


为什么我有这个输出,我该如何解决?

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

Clear-RecycleBin基本上做到以下几点:

  1. 准备状态消息
  2. 将进度设置为 30%
  3. 称呼shell32.dll!SHEmptyRecycleBin()
  4. 将进度设置为 100%

调用SHEmptyRecycleBin()是阻塞调用(即控制只会在完成时返回给调用者),并且 cmdlet 确实无法将正在进行的进度传递回调用者,因为进度 UIshell32.dll与桌面外壳紧密集成设计,而不是真正设计用于在任何其他环境中使用或检测。


推荐阅读