Как скопировать файл по сети при помощи PowerShell и службы BITS

Обновлено 08.08.2016

Как скопировать файл по сети при помощи PowerShell и службы BITS

Как скопировать файл по сети при помощи PowerShell и службы BITS

Всем привет сегодня расскажу как скопировать файл по сети при помощи PowerShell и службы BITS. В суровых условиях жития в Windows, в случае необходимости скачать огромный файл из интернета или скопировать его в удалённый филиал с отвратительным рвущимся интернетом, не надо бежать за wget'ом и rsync'ом. Хотя это и совершенно замечательные и полезные утилиты, всё необходимое у нас уже есть. Необходимое называется Powershell v2 и служба Background Intelligent Transfer Service. Они есть во всех Windows, начиная с XP. По крайней мере, если те обновляются. Основная прелесть BITS - задание выполняется не смотря на разрывы связи и перезагрузки компьютеров. Использовать эту радость можно, например, так:

# Откуда и куда
$src = "https://example.org/db/StarWars.iso"
$dst = "\\shittyinternet\c$\SW.iso"
# Если нужны какие-нибудь учётные данные
$cred = Get-Credential

# Импортируем модуль BITS
Import-Module BitsTransfer
# Запускаем закачку асинхронно
$dl = Start-BitsTransfer -Source $src -Destination $dst -Asynchronous -Credential $cred
# Показывать процент завершения до конца передачи
while ($dl.JobState -ne "Transferred") {
  $per = $dl.BytesTransferred/$dl.BytesTotal*100
  Write-Progress -activity "Copying" -status ($per.ToString()+"%") -PercentComplete $per
  Start-Sleep 1
}
# Завершить закачку
$dl | Complete-BitsTransfer

В задании, кстати, может быть сразу много файлов. А можно сделать csv-файл, где в каждой строке написать src,dst и скормить это как Import-CSV filelist.txt | Start-BitsTransfer.

Вот так вот просто  скопировать файл по сети при помощи PowerShell и службы BITS.

Материал сайта pyatilistnik.org

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *