PowerShell: используем BITS для копирования (скачивания) больших файлов

Если вам нужно скачать (передать) большой файл на удаленный компьютер, не нагружая канал передачи данных, рекомендуем воспользоваться протоколом BITS. BITS ( Background Intelligent Transfer service ) – это встроенная служба Windows для передачи файлов между компьютерами, которая поддерживает асинхронный режим, работу в фоне, поддерживает докачку файлов, может использовать незадействованную пропускную способность сети и динамически изменять скорость загрузки. Таким образом BITS позволяет эффективно передавать большие файлы по нестабильному или медленному каналу, не влияя на трафик других сетевые приложений. В этой статье мы рассмотрим, как скачивать и передавать файлы между компьютерами по протоколу BITS с помощью PowerShell.

Как скачать файл с помощью PowerShell модуля BitsTransfer?

Для управления заданиями BITS можно использовать встроенный PowerShell модуль BitsTransfer .

Чтобы скачать ISO, который хранится на веб сервере IIS с помощью протокола BITS, выполните команду:

Start-BitsTransfer –source http://testsite.contoso.com/netinst.iso -destination c:temp

Клиент BITS скачает файл в синхронном режиме и сохранит его в указанный локальный каталог. На экране появится полоса, показывающая процесс загрузки. При потере подключения докачка файла не выполняется (придется заново скачивать весь файл целиком). Т.е. команда загрузки в таком режиме аналогична скачиванию файла с сайта с помощью Invoke-WebRequest .

Асинхронная загрузка файлов с докачкой по протоколу BITS

Для загрузки файлов по BITS в асинхронном режиме (с докачкой), нужно добавить параметр –asynchronous :

Start-BitsTransfer –source http://testsite.contoso.com/netinst.iso -destination c:temp  -asynchronous

Асинхронное задание BITS будет автоматически продолжено при обрывах соединениях или перезагрузке источника или приемника.

По умолчанию задание BITS занимает всю доступную ширину канала связи (режим Foreground). Чтобы задание BITS использовало только неиспользуемую емкость канала связи, нужно добавить параметр -Priority low . В этом случае задание загрузки BITS не будет конкурировать за канал передачи с другими сервисами.

Управление заданиями BITS с помощью PowerShell

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

Get-BitsTransfer | fl

Команда возвращает статус передачи (в данном случае передача окончена, Transferred ), информацию о количестве переданных байт, общем размере файла, времени создания и завершения задания BITS.

Получить статус всех фоновых заданий BITS на компьютере:

Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize

После завершения загрузки файла, нужно выполнить команду:

Get-BitsTransfer| where JobState -eq 'Transferred'| Complete-BitsTransfer

Если этого не сделать, клиент BITS не переименует автоматически временный файл с расширением TMP в целевом каталоге в исходное имя файла.

С помощью BITS можно копировать файлы не только по HTTP, но и по-обычному SMB протоколу Windows. Чтобы скопировать файл на удаленный компьютер в административную шару C$ или в общую сетевую папку, нужно указать UNC путь:

Start-BitsTransfer -Source C:isowin11.iso -Destination \srv01c$iso -Asynchronous -DisplayName CopyISOtoSRV

Вы можете временно приостановить задание BITS:

Get-BitsTransfer -Name CopyISOtoSRV| Suspend-BitsTransfer

Возобновить загрузки файла:

Get-BitsTransfer -Name CopyISOtoSRV| Resume-BitsTransfer -Asynchronous

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

Start-BitsTransfer -source _http://10.2.2.148/erd65_32.iso -destination c:temp -asynchronous -Priority low -Authentication NTLM -Credential Get-Credential

Следующий PowerShell скрипт можно использовать для отслеживания статуса задания загрузки большого файла. На экран будет выводиться процент выполнения загрузки, а после окончания задания файл переименует TMP файл в исходный формат

$job = Start-BitsTransfer -Source _http://10.2.2.148/erd65_32.iso -Destination c:temp -Asynchronous
while( ($job.JobState.ToString() -eq 'Transferring') -or ($job.JobState.ToString() -eq 'Connecting') )
{
Write-host $Job.JobState.ToString()
$Pro = ($job.BytesTransferred / $job.BytesTotal) * 100
Write-Host $Pro “%”
Sleep 3
}
Complete-BitsTransfer -BitsJob $job

BITS широко используется для фоновой передачи файлов в Windows сетях. Именно этот протокол используется для загрузки обновления через Windows Update (в том числе с сервера обновлений WSUS ). Задание копирования файла через BITS выполнятся несмотря на разрывы связи, перезагрузки компьютеров, не так загружает канал связи, и не мешает работе других сетевых приложений и пользователей. Протокол BITS может быть оптимальным решением для передачи по WAN сетям больших файлов ISO образов и файлов виртуальных машин (vmdk, vhdx).

admin

Share
Published by
admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago