Был задан вопрос,как скачать файлы обновления с сайта http://update.optizone.ru/nod32/eset_upd/ ,задача просто решается с помощью PowerShell без посторонних средств.
1)Самый простой вариант воспользуемся классом
WebClient и двумя методами
DownloadString и
DownloadFile
Код:
$url = "http://update.optizone.ru/nod32/eset_upd/"
$dest = "C:\Base"
$wc = New-Object System.Net.WebClient
-split $wc.DownloadString($url) | ? {$_ -match '^href="[^/]'} | % {[void]($_ -match '"(.+)"');$wc.DownloadFile("$url/$($matches[1])","$dest\$($matches[1])")}
2)Здесь воспользуемся модулем BitsTransfer.Список доступных команд модуля можно посмотреть с помощью Get-Command -Module bitstransfer
Код:
$url = "http://update.optizone.ru/nod32/eset_upd/"
$dest = "F:\FTP"
Import-Module bitstransfer
$wc = New-Object System.Net.WebClient
-split $wc.DownloadString($url) | ? {$_ -match '^href="[^/]'} | % {[void]($_ -match '"(.+)"'); Start-BitsTransfer "$url$($matches[1])" -Destination $dest }
3)Суть такая же ,что и в 1 случае,только добавляем 2 события,которые нужны для создания прогресс бара.
Первое событие
DownloadFileCompleted и
DownloadProgressChanged -
Немного переделал скрипт автора -
http://achuebrigens.wordpress.com/2009/08/22/digitales-taz-abo-via-powershell/ ,за что ему большое Спасибо.
Код:
$url = "http://update.optizone.ru/nod32/eset_upd/"
$dest = "C:\Base"
[switch]$ShowProgress=$true
$wc = New-Object System.Net.WebClient
$files = -split $wc.DownloadString($url) | ? {$_ -match '^href="[^/]'} | % {[void]($_ -match '"(.+)"');$matches[1]}
try
{
if ($ShowProgress -and $files)
{
$files | ForEach-Object {
$ProgressAction = {
write-progress -Activity "$_" -Status "Скачивание" -PercentComplete $Eventargs.ProgressPercentage
}
Get-EventSubscriber | where { $_.EventName -eq "DownloadProgressChanged"} | foreach-object { unregister-event -SubscriptionID $_.SubscriptionID }
Register-Objectevent -EventName "DownloadProgressChanged" -InputObject $wc -Action $ProgressAction | Out-Null
Get-EventSubscriber | where { $_.EventName -eq "DownloadFileCompleted"} | foreach-object { unregister-event -SubscriptionID $_.SubscriptionID }
Register-ObjectEvent -EventName "DownloadFileCompleted" -InputObject $wc -SourceIdentifier "$_" | Out-Null
$wc.DownloadFileAsync("$url$_", "$dest\$_")
wait-event -SourceId "$_" | Out-Null
remove-event -SourceId "$_"
}
}
}
finally
{
if ($wc)
{
$wc.CancelAsync()
}
get-eventsubscriber | where { $_.EventName -eq "DownloadProgressChanged"} | foreach-object { unregister-event -SubscriptionID $_.SubscriptionID -whatif:$false -confirm:$false }
get-eventsubscriber | where { $_.EventName -eq "DownloadFileCompleted"} | foreach-object { unregister-event -SubscriptionID $_.SubscriptionID -whatif:$false -confirm:$false }
}
2 и 3 способ с поддержкой Progress Bar =)
