这是我第一次使用Clear-RecycleBin
cmdlet,很明显,此cmdlet绘制了一个典型的命令行进度条,我认为从开始到开始,它应该用符号或色块填充。结束,或者应该只在条形图的中间打印一个百分比值,我不完全知道,因为正如我所说的,这是我第一次使用此cmdlet,但是,看到下面的图像是显而易见的进度条输出错误。进度条完全是“静态”的,它不会填充该条,它只是(一次)打印几个字符,并且不会继续打印更多的字符,如下图所示:
我通过将数千个文件发送到回收站来对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"
我的问题是:为什么我有此输出以及如何解决?
答案 0 :(得分:4)
为什么有此输出以及如何解决?
您之所以有此输出,是因为Clear-RecycleBin
的作者故意欺骗了您,您实际上无能为力。
Clear-RecycleBin
主要执行以下操作:
shell32.dll!SHEmptyRecycleBin()
对SHEmptyRecycleBin()
的调用是阻塞调用(即,控件将仅在完成时返回给调用者),并且cmdlet实际上无法将正在进行的进度中继回调用者,因为进度UI shell32.dll
中的dbs是与桌面shell设计紧密集成在一起的,并不是将其真正设计为在任何其他上下文中使用或检测。