Powershell измельчает до конца путем обработки

У меня есть следующий скрипт power-shell (4.0). Он открывает книгу Excel (2013) и получает URL-адрес из ячейки и открывает ее. Затем он загружает веб-страницу в файл .htm. Он выполняет итерацию по каждой строке на листе (~ 3000).

Проблема, с которой я столкнулась, – это первые ~ 500 файлов, которые выполняются примерно за 3 минуты. Затем он значительно замедляется, когда только один файл создается каждые 2-3 минуты. Я проверил доступное использование ram и cpu, и оба они прекрасны (ram 2.93gb используется 8gb, CPU – 35%).

Есть ли что-нибудь, что я могу сделать, чтобы обойти это и ускорить его?

cls $output_folder = "c:\temp" $OUTPUT_FILENAME="" # comment following line to add a timestamp to each file gets created if($OUTPUT_FILENAME.length -eq 0) {$OUTPUT_FILENAME=(get-date).tostring().replace(" ","").replace("/","").replace(":","")} $filepath = "C:\Temp\MeteringHistory\Meters for Maximo Upload" $xl = New-Object -COM "Excel.Application" $xl.Visible = $false $wb = $xl.Workbooks.Open($filepath) $ws = $wb.Worksheets.Item("WOhistory") $maxRow = ($ws.UsedRange.rows).count $minRow = 1 for ($minrow -le $maxrow ; $minrow++) { $website = $ws.cells.item($minRow, 1).text $fileName = $ws.cells.item($minRow, 5).text + " - " + $ws.cells.item($minRow, 4).text $fileName = $fileName -replace '/', '_' $wc=new-object system.net.webclient $wc.UseDefaultCredentials = $true $wc.downloadfile($website,"c:\temp\MeteringHistory\Files\$filename.htm") $wc.Dispose() } 

Я бы сначала экспортировал Excel в CSV, а затем Excel. Вы можете даже сделать это из самой PowerShell. Затем используйте invoke-webrequest вместо всего того шаблона, который у вас есть, и invoke-webrequest с ним. Это можно сделать только в нескольких строках кода. Таким образом вы уменьшаете проблему до базовой powershell.

Слишком ускорить этот процесс, вы можете затем вызвать-webrequest параллельно с помощью фоновых заданий.

Трудно узнать, что случилось, без ошибок. Я бы попробовал одну вещь: избегайте создания и удаления сотен WebClient -объектов, когда вы можете повторно использовать первый. Пытаться:

 cls $output_folder = "c:\temp" $OUTPUT_FILENAME="" # comment following line to add a timestamp to each file gets created if($OUTPUT_FILENAME.length -eq 0) {$OUTPUT_FILENAME=(get-date).tostring().replace(" ","").replace("/","").replace(":","")} $filepath = "C:\Temp\MeteringHistory\Meters for Maximo Upload" $xl = New-Object -COM "Excel.Application" $xl.Visible = $false $wb = $xl.Workbooks.Open($filepath) $ws = $wb.Worksheets.Item("WOhistory") $maxRow = ($ws.UsedRange.rows).count $minRow = 1 $wc=new-object system.net.webclient $wc.UseDefaultCredentials = $true for ($minrow -le $maxrow ; $minrow++) { $website = $ws.cells.item($minRow, 1).text $fileName = $ws.cells.item($minRow, 5).text + " - " + $ws.cells.item($minRow, 4).text $fileName = $fileName -replace '/', '_' $wc.DownloadFile($website,"c:\temp\MeteringHistory\Files\$filename.htm") } $wc.Dispose() 
  • Таблица Excel с использованием Powershell
  • Как изменить интервал автосохранения для Word и Powerpoint 2013 с помощью Powershell?
  • Как преобразовать .xls в .csv, используя Powershell без установленного Excel
  • Powershell - Скрыть сообщение об ошибке, отображаемое в строке 3
  • Получите Powershell, чтобы искать пустые ячейки из ссылочной строки, а не искать весь столбец
  • Проблема с export-csv нет данных?
  • Как добавить фильтр в PowerShell Excel
  • Как добавить ярлык вторичной оси Excel через PowerShell?
  • Powershell 2.0 напишите в xlsx
  • Нужно немного помочь добавить диапазон таблиц из файла excel на sharepoint в тело электронной почты с помощью powershell
  • Обработать .xlsx до csv с помощью Powershell с использованием переименования и установки разделителя
  • Давайте будем гением компьютера.