ProgressPreference и PowerShell 5
Я давно стараюсь не пользоваться Windows PowerShell 5, перейдя на 7 версию, но иногда приходится сталкиваться с неожиданными нюансами в работе «старичка» там, где нет новой версии. Так и случилось на днях, когда я игрался со скриптом для песочницы.
Проблема заключалась в том, что мне нужно было скачать файл на 200 мегабайт, для чего я пытался использовать командлет Invoke-WebRequest. Но я так и не смог дождаться его завершения…
Абсурдность этой проблемы заключается в том, как она решается. Но для начала немного статистики:
- Скачивание файла на 200 мегабайт без предварительной настройки занимает 15 минут
- Скачивание этого же файла после небольших манипуляций 20 секунд
В чём же проблема, что за волшебство надо сделать, чтобы скорость так подросла? А я скажу. Просто отключить статус выполнения (прогресс) через следующую команду:
Set-Variable ProgressPreference SilentlyContinue
И всё. При выполнении Invoke-WebRequest для скачивания файла мы больше не видим статус выполнения, при этом скорость выполнения вырастает просто космически.
Ошибка
- Данная проблема уже решена в Powershell 6 и выше (который до сих пор необходимо устанавливать самостоятельно)
- Ещё альтернативным решением на старых версиях может быть использование командлета
Start-BitsTransfer, но для его работы вы должны быть уверены в запуске службы BITS.
