powershell - Clear-RecycleBin cmdlet 的进度条输出显示不正确
问题描述
我是第一次使用Clear-RecycleBin
cmdlet,很明显,这个 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"
我的问题是:为什么我有这个输出,我该如何解决?
解决方案
为什么我有这个输出,我该如何解决?
你有这个输出是因为Clear-RecycleBin
故意的作者欺骗了你,你真的无法做任何事情来修复它。
Clear-RecycleBin
基本上做到以下几点:
- 准备状态消息
- 将进度设置为 30%
- 称呼
shell32.dll!SHEmptyRecycleBin()
- 将进度设置为 100%
调用SHEmptyRecycleBin()
是阻塞调用(即控制只会在完成时返回给调用者),并且 cmdlet 确实无法将正在进行的进度传递回调用者,因为进度 UIshell32.dll
与桌面外壳紧密集成设计,而不是真正设计用于在任何其他环境中使用或检测。
推荐阅读
- c - IPC 消息队列
- struct - 为什么我不能使用 C#9 的“with”关键字来创建结构的副本(如使用记录)
- kernel - 在中断处理程序上读取字符导致等待队列永远等待
- amazon-redshift - Redshift: converting timestamp to date in specific time zone
- geometry - 如何匹配 2D 框的几何模板以适应另一组 2D 框
- python-3.x - 如何将 getmtime() 转换为日期时间?
- python - OSError:每个套接字地址(协议/网络地址/端口)通常只允许使用一次
- flutter - 如何从给定日期获取前 5 天的日期?
- c - 在 C 编程语言中使用 do/while 时的奇怪输出
- node.js - 连接因错误而关闭错误:不支持的协议“未定义”