Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Добавить прогресс бар к скрипту скачивания файлов из интернета

Ответить
Настройки темы
PowerShell - Добавить прогресс бар к скрипту скачивания файлов из интернета

Старожил


Сообщения: 227
Благодарности: 21

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt downl.txt
(2.4 Kb, 1 просмотров)
Добрый день всем!
Написал коротенький скрипт для скачивания плейлистов:
Код: Выделить весь код
   foreach($line in Get-Content downl.txt) {
   if($line ){
   $webclient = New-Object System.Net.WebClient
   $webclient.Encoding = [System.Text.Encoding]::UTF8
   $webclient.DownloadString($line) | Out-File .\out\out.m3u -Append
   }
}
Скрипт берёт ссылки из файла downl.txt (прикреплён) и скачивает все плейлисты в один out.m3u
Хотелось бы добавить к скрипту прогресс бар, заполняющийся по мере скачивания плейлистов.
Нашел код неплохого прогресс бара с GUI:
Код: Выделить весь код
$Path = "F:\zagruz"	## --- Put Folder-Path Here 
If (Test-Path $Path) {
	Write-Host
	Write-Host "Listing All Files Found In $Path" -ForegroundColor "Yellow"
	Write-Host "=========================================" -ForegroundColor "Yellow"

	Add-Type -assembly System.Windows.Forms

	## -- Create The Progress-Bar
	$ObjForm = New-Object System.Windows.Forms.Form
	$ObjForm.Text = "Demonstration of Progress-Bar In PowerShell"
	$ObjForm.Height = 100
	$ObjForm.Width = 500
	$ObjForm.BackColor = "White"

	$ObjForm.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedSingle
	$ObjForm.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen

	## -- Create The Label
	$ObjLabel = New-Object System.Windows.Forms.Label
	$ObjLabel.Text = "Starting. Please wait ... "
	$ObjLabel.Left = 5
	$ObjLabel.Top = 10
	$ObjLabel.Width = 500 - 20
	$ObjLabel.Height = 15
	$ObjLabel.Font = "Tahoma"
	## -- Add the label to the Form
	$ObjForm.Controls.Add($ObjLabel)

	$PB = New-Object System.Windows.Forms.ProgressBar
	$PB.Name = "PowerShellProgressBar"
	$PB.Value = 0
	$PB.Style="Continuous"

	$System_Drawing_Size = New-Object System.Drawing.Size
	$System_Drawing_Size.Width = 500 - 40
	$System_Drawing_Size.Height = 20
	$PB.Size = $System_Drawing_Size
	$PB.Left = 5
	$PB.Top = 40
	$ObjForm.Controls.Add($PB)

	## -- Show the Progress-Bar and Start The PowerShell Script
	$ObjForm.Show() | Out-Null
	$ObjForm.Focus() | Out-NUll
	$ObjLabel.Text = "Starting. Please wait ... "
	$ObjForm.Refresh()

	Start-Sleep -Seconds 1

	## -- Execute The PowerShell Code and Update the Status of the Progress-Bar

	$Result = Get-ChildItem -Path $Path -File -Recurse -Force | Select Name, @{Name="Path";Expression={$_.FullName}}
	$Counter = 0
	ForEach ($Item In $Result) {
		## -- Calculate The Percentage Completed
		$Counter++
		[Int]$Percentage = ($Counter/$Result.Count)*100
		$PB.Value = $Percentage
		$ObjLabel.Text = "Recursive Search: Writing Names of All Files Found Inside $Path"
		$ObjForm.Refresh()
		Start-Sleep -Milliseconds 150
		# -- $Item.Name
		"`t" + $Item.Path

	}

	$ObjForm.Close()
	Write-Host "`n"
}
Else {
	Write-Host
	Write-Host "`t Cannot Execute The Script." -ForegroundColor "Yellow"
	Write-Host "`t $Path Does Not Exist in the System." -ForegroundColor "Yellow"
	Write-Host
}
Но как его "прикрутить" к своему скрипту, ума не приложу. Нигде не могу найти хотя бы подсказки на эту тему.
Ткните носом, пожалуйста, какие переменные указать в этом скрипте, чтобы он контролировал процесс выполнения моего скрипта.

Отправлено: 19:58, 30-06-2019

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Зачем в цикле плодить экземпляры объекта WebClient? Во-вторых, непонятно у вас WinForm сценарий или все должно выводиться в хост? Для последнего предусмотрен командлет Write-Progress, в первом случае - все зависит от того, как именно должен вестись полсчет: скопом для всех файлов или же в отдельности для каждого (хотя в обоих случаях нужно взять размер файла из ответа запроса и относительно него вести расчет процента состояния загрузки).
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:22, 01-07-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Uragan66:
Нашел код неплохого прогресс бара с GUI: Но как его "прикрутить" к своему скрипту, ума не приложу.»
1) Прикрутите к своему скрипту штатный прогресс бар
2) Замените вызов штатного прогресс-бара на
Код: Выделить весь код
$PB.Value = $Percentage
$ObjLabel.Text = "Recursive Search: Writing Names of All Files Found Inside $Path"
$ObjForm.Refresh()
Цитата greg zakharov:
Зачем в цикле плодить экземпляры объекта WebClient? »
чтобы потом обернуть в workflow и получить параллельное исполнение
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:27, 01-07-2019 | #3


Старожил


Сообщения: 227
Благодарности: 21

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
Зачем в цикле плодить экземпляры объекта WebClient? »
Пробовал прописывать не в цикле - скачивание не идёт.
Цитата greg zakharov:
непонятно у вас WinForm сценарий или все должно выводиться в хост? »
да из меня, честно сказать, скриптописатель пока никакой, но, думаю, лучше сделать сценарием WinForm.
Цитата greg zakharov:
как именно должен вестись полсчет: скопом для всех файлов или же в отдельности для каждого »
Наверное лучше всё вместе, начало работы скрипта - пошла полоска на прогресс баре, скрипт отработал - прогресс бар закрылся. Так как в начале темы я привёл только часть скрипта, после скачивания плейлиста идёт его разбор с кодом, написанным Вами в другой теме ».
Я его только немного подправил для своей задачи (продолжение кода):
Код: Выделить весь код
   $soft = 'nhrt.exe'
   Start-Process -FilePath $soft -ArgumentList  '-list:cleaning.txt .\out\out.m3u' -NoNewWindow -Wait
   @(for($i, $arr = 0, (gc .\out\out.m3u -Encoding utf8); $i -lt $arr.Length;) {
   $a, $b = $arr[$i], $arr[$i + 1] # потенциальная пара
   # критерий относительно которого формируется пара
   if ($a.StartsWith('#EXTINF') -and $b -match ':\/\/') {
      # выводим пару в окно хоста
      "$a`n$b"
      # переходим на две позиции вперед
      $i += 2
   }
   else {
      # в противном случае переходим к следующему значению
      ++$i
      continue
   }
}) | Sort-Object -Unique | Out-File .\out\plist_google.m3u -Encoding utf8
    Start-Process -FilePath $soft -ArgumentList  '-list:replzag.txt .\out\plist_google.m3u' -NoNewWindow -Wait
Цитата Busla:
Прикрутите к своему скрипту штатный прогресс бар »
Busla, можно было бы конечно, но хотелось бы поэстетичнее, с красивой формой...

Отправлено: 13:11, 01-07-2019 | #4


(*.*)


Сообщения: 36567
Благодарности: 6698

Профиль | Сайт | Отправить PM | Цитировать


А производительность тестировали? А то бывает и так https://twitter.com/sterkin_ru/statu...82187162152961

Отправлено: 14:46, 01-07-2019 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Vadikan, честно говоря, из твита непонятно: как бывает, и при чём здесь wget неизвестного происхождения.

Отправлено: 14:57, 01-07-2019 | #6


(*.*)


Сообщения: 36567
Благодарности: 6698

Профиль | Сайт | Отправить PM | Цитировать


Busla, там invoke-webrequest, а wget - его псевдоним.

Отправлено: 18:01, 01-07-2019 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Добавить прогресс бар к скрипту скачивания файлов из интернета

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Добавить прогресс бар в готовый скрипт c4uran Скриптовые языки администрирования Windows 11 26-10-2018 20:16
CMD/BAT - Помогите прикрутить прогресс бар к скрипту Виктор_Падий@vk Скриптовые языки администрирования Windows 4 13-11-2016 14:44
Программа для скачивания видео файлов из интернета Baber Хочу все знать 11 11-01-2015 00:02
Прочее - Проблема со скоростью скачивания файлов из интернета doc11111 Сетевые технологии 0 27-09-2013 12:34
Добавить прогресс бар к скрипту support23 AutoIt 1 25-11-2012 06:53




 
Переход