Вывод индикатора выполнения командлета Clear-RecycleBin отображается неправильно - PullRequest
0 голосов
/ 14 октября 2019

Это первый раз, когда я использую командлет Clear-RecycleBin, и кажется очевидным, что этот командлет рисует типичный индикатор выполнения командной строки, который, я думаю, должен быть заполнен символами или, возможно, цветомблоки от начала до конца, или, может быть, он должен просто напечатать процентное значение в середине строки, я точно не знаю, потому что, как я говорю, я впервые использую этот командлет, однако, просматриваю изображениениже его очевидный вывод индикатора выполнения неправильный. Proggress-bar полностью «статичен», он не заполняет панель, он просто печатает (сразу) пару символов и не продолжает печатать больше из них, как показано на этом рисунке:

enter image description here

Я несколько раз проверял командлет, отправляя тысячи файлов в корзину, таким образом вынуждая командлет занять время (в минутах), чтобы завершить циклоперации, и я заметил, что не имеет значения, сколько времени прошло, пока этот командлет работает, вывод индикатора выполнения всегда одинаков. Печатается только такое количество символов «о», и они печатаются мгновенно, а не постепенно.

Я подумал, что, возможно, это может быть какой-то проблемой выходного кодирования, в противном случае этот странный вывод индикатора выполнения кажется мне необъяснимым...

Я не уверен, что не так. Вот как я запускаю этот командлет:

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 Ответ

4 голосов
/ 14 октября 2019

почему у меня такой вывод и как я могу это исправить?

У вас такой вывод, потому что автор Clear-RecycleBin намеренно обманывает вас, и вы можетена самом деле ничего не делает, чтобы это исправить.

Clear-RecycleBin в основном делает следующее:

  1. Готовит сообщения о состоянии
  2. Устанавливает прогресс на 30%
  3. Call shell32.dll!SHEmptyRecycleBin()
  4. Установите для Progress значение 100%

Вызов SHEmptyRecycleBin() является блокирующим (т. Е. Управление будет возвращено тольковызывающей стороне по завершении), и командлет действительно не имеет возможности передать текущий прогресс обратно вызывающей стороне, потому что пользовательские интерфейсы прогресса в shell32.dll тесно интегрированы с оболочкой рабочего стола, и на самом деле не предназначены для использования илиинструментальный в любом другом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...