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
基本上执行以下操作:
- 准备状态消息
- Set Progress to 30%
- 致电
shell32.dll!SHEmptyRecycleBin()
- 将进度设置为 100%
对 SHEmptyRecycleBin()
的调用是阻塞调用(即控制权只会在完成时返回给调用者),并且 cmdlet 实际上无法将正在进行的进度传递回调用者,因为shell32.dll
中的进度 UI 在设计上与桌面 shell 紧密集成,并非真正设计用于在任何其他上下文中使用或检测。
我是第一次使用 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
基本上执行以下操作:
- 准备状态消息
- Set Progress to 30%
- 致电
shell32.dll!SHEmptyRecycleBin()
- 将进度设置为 100%
对 SHEmptyRecycleBin()
的调用是阻塞调用(即控制权只会在完成时返回给调用者),并且 cmdlet 实际上无法将正在进行的进度传递回调用者,因为shell32.dll
中的进度 UI 在设计上与桌面 shell 紧密集成,并非真正设计用于在任何其他上下文中使用或检测。