Как скопировать файл по сети при помощи 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