Есть ли способ сохранить индикаторы выполнения в Powershell без снижения производительности? - PullRequest
0 голосов
/ 09 апреля 2020

Есть ли какая-то пользовательская функция, которая может заменить индикатор выполнения? У меня есть скрипт, который загружает и извлекает zip-архив, но с включенными индикаторами выполнения $ProgressPreference = 'Continue' процесс занимает буквально в 50 раз больше времени, чем если бы они были отключены с помощью $ProgressPreference = 'SilentlyContinue'

Однако я Я действительно хотел бы иметь индикаторы прогресса. Есть ли обходной путь?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Если вы используете Invoke-WebRequest для загрузки файла с предпочтением прогресса по умолчанию, это обеспечит постоянное обновление потока байтов, что снижает производительность. Вы можете запустить команду как задание и обеспечить прогресс загрузки байтов с выбранным интервалом.

$uri = 'https://host.domain.com/myfile'
$sb = {
          $progresspreference = 'SilentlyContinue'
          Invoke-WebRequest -Uri $using:uri -Outfile 'c:\temp\file.txt'
}
Start-Job -Name 'Download' -ScriptBlock $sb
while ((Get-Job -Name 'Download').State -eq 'Running') {
    Write-Progress -Activity "Downloaded Bytes" -CurrentOperation $((Get-ChildItem 'c:\temp\file.txt').Length)
    sleep 1
}
0 голосов
/ 09 апреля 2020

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

Start-BitsTransfer -Source $using:uri -Destination 'c:\temp\file.txt'

Для передачи файлов Start-BitsTransfer значительно превосходит Invoke-WebRequest . Как только вы сделаете переключатель, вы никогда не оглядываетесь назад. Вы по-прежнему получаете индикаторы выполнения, если не используете асинхронный режим, но снижение производительности незначительно, поскольку передача происходит в фоновом режиме с использованием службы Windows BITS. Кроме того, вы получаете все преимущества службы BITS, такие как фоновая передача в режиме ожидания / паузы, выбор приоритета передачи / политики политики, возобновление загрузки при перезагрузке системы, использование сохраненных учетных данных из Windows Диспетчер учетных данных.

Кроме того, параметры -Source и -Destination работают с в любой комбинации из следующих:

  • Локальные пути
  • Удаленные пути к общим файлам
  • Пути URI

ПРИМЕЧАНИЕ. Модуль BitsTransfer впервые был доступен в Windows Powershell 3.0 on Windows 7 / Windows Server 2008 R2 и новее.

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