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

时间:2019-10-14 11:55:12

标签: powershell cmdlets cmdlet pscmdlet

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

enter image description here

我通过将数千个文件发送到回收站来对cmdlet进行多次测试,这样我就迫使cmdlet花时间(以分钟为单位)来完成回收操作,并且我发现它无关紧要多少时间在此cmdlet工作时经过了30分钟,进度条输出始终相同。仅打印那么多的“ 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"

我的问题是:为什么我有此输出以及如何解决?

1 个答案:

答案 0 :(得分:4)

  

为什么有此输出以及如何解决?

您之所以有此输出,是因为Clear-RecycleBin的作者故意欺骗了您,您实际上无能为力。

Clear-RecycleBin主要执行以下操作:

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

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