Копирайте големи файлове в мрежата с помощта на BITS и PowerShell

В локални (и глобални) мрежи файловете между системите обикновено се прехвърлят чрез SMB, FTP или HTTP протоколи. Проблемът с всички тези протоколи е трудността при изтегляне на големи файлове, което може да се влоши от проблемите с предаването на данни по бавен или нестабилен канал. При копиране на файлове с помощта на тези протоколи обикновено се използва цялата налична честотна лента на комуникационния канал между сървъра и получателя, което може да повлияе неблагоприятно върху работата на мрежата и други приложения (не винаги е възможно да се конфигурират правилните QoS политики на ниво мрежово оборудване). В тази статия ще разгледаме възможността за използване на протокола. BITS и cmdlets PowerShell да копирате големи файлове по мрежата чрез нестабилен или бавен канал.

Съдържание:

  • BITS протокол
  • BITS: Изисквания за версия на OS и PowerShell
  • Как да изтеглите файл, използвайки BITS протокол с помощта на PowerShell
  • Синхронно прехвърляне на файлове между компютри, използващи BITS
  • Използване на BITS за асинхронно копиране на големи файлове по мрежа
  • Копиране на цялото съдържание на мрежов дял чрез BITS
  • Качване на файл на HTTP сървър с помощта на PowerShell и BITS

BITS протокол

BITS или фон интелигентен прехвърляне обслужване - (Background Intelligent Transfer Service) е услуга на Windows, която се използва за прехвърляне на файлове между системите. С помощта на BITS протокола можете да прехвърляте както файлове за изтегляне, така и качване. Според този протокол компютрите изтеглят файлове от сървъри при извършване на автоматична актуализация на Windows (включително при изтегляне на актуализации от WSUS сървър), при получаване на програми от SCCM точки за разпространение и т.н..

Предимства на BITS протокола:

  • BITS е интелигентен протокол, който по време на работа е в състояние да регулира използваната честотна лента на комуникационния канал, така че да не влияе на други мрежови приложения и услуги. BITS могат да използват само неразпределена честотна лента на канала и динамично да променят скоростта на предаване на данни по време на работа (ако други приложения увеличават натоварването в мрежата, BITS може да намали скоростта на предаване на данни по мрежата);
  • Изтеглянето на файлове може да премине на заден план, невидимо за потребителя;
  • Работата BITS в режим на възобновяване автоматично ще продължи, дори ако комуникационният канал между компютъра и клиента се прекъсне или след като компютърът се рестартира;
  • По всяко време можете да спрете или възобновите изтеглянето чрез BITS без загуба на данни;бележка. Възможността за рестартиране на процедурата за копиране на файлове през мрежата е налична и в помощната програма robocopy.exe, която ви позволява да възобновите изтеглянето на файла в случай на неуспех на връзката.
  • BITS ви позволява да управлявате приоритетите на задачата за зареждане;
  • Прехвърлянето на файлове между компютри става на портове 80 (HTTP) или 443 (HTTPS), така че не е необходимо да отваряте допълнителни портове в защитните стени. Например 445 порта, които се копират при използване на SMB протокол (не забравяйте, че има много уязвими места в по-старите версии на протокола SMB 1.0);
  • От страна на получателя и сървъра, не се изисква разгърнат IIS сървър.

По този начин BITS е оптималният протокол за прехвърляне на големи файлове през бавни и нестабилни мрежи (сателитен канал, GPRS връзка и т.н.).

BITS: Изисквания за версия на OS и PowerShell

Протоколът BITS за първи път беше въведен още в Windows XP, за управление на BITS задания, в които беше възможно да се използва помощната програма bitsadmin.Търсейки. Помощната програма все още се поддържа, но е оттеглена. За да управлявате BITS задачи, за предпочитане е да използвате специални командлети PowerShell.

За да работим в този сценарий, се нуждаем от ОС, не по-ниска от Windows Vista или Windows Server 2008, и PowerShell не по-ниска от версия 2.0. Съвременните версии на Windows 10 и Windows Server 2016/2012 R2 изцяло поддържат BITS протокол.

съвет. Възможно е да използвате Windows Server 2003. В този случай ще трябва да инсталирате специални актуализации KB 923845 и PowerShell V2.0.

Поддръжката на BITS е необходима както от страна на клиента, така и от страна на сървъра.

Как да изтеглите файл, използвайки BITS протокол с помощта на PowerShell

Да предположим, че искате да изтеглите голям ISO файл, съхраняван на IIS HTTP сървър (_http: //10.2.2.148/erd65_32.iso).

Предполага се, че е разрешен анонимен достъп до този URL адрес (в бъдеще ще помислим за достъп до URL адреса с удостоверяване).

Първо, заредете BITS модула за поддръжка в сесията PowerShell:

Импорт-модул BitsTransfer

След като заредите модула, можете да изброите всички налични команди на модула BitsTransfer:

get-command * -БИТИ *

Както можете да видите, само 8 cmdlets са налични:

  • Add-BitsFile
  • Пълна-BitsTransfer
  • Get-BitsTransfer
  • Remove-BitsTransfer
  • Resume-BitsTransfer
  • Set-BitsTransfer
  • Старт-BitsTransfer
  • Suspend-BitsTransfer

Синхронно прехвърляне на файлове между компютри, използващи BITS

Командлерът Start-BitsTransfer ви позволява да изтегляте файлове чрез HTTP (s) (както и командлета Invoke-WebRequest) и от споделени мрежови папки (чрез SMB). За да изтеглите файл от определен URL адрес, използвайки BITS протокол и го запишете в локална директория C: \ Temp, използвайте командата:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -дестинация c: \ temp

съобщение Това е прехвърляне на файлове, което използва услугата Background Intelligent Transfer (BITS) казва, че изтеглянето на посочения файл чрез BITS протокол е започнало.

В този пример командлетът изтегля файла синхронно. Изтеглянето на файла прилича на обичайната процедура на копиране чрез Explorer или с помощта на командния елемент на PoSh командлет. В този случай лентата за напредък се показва на екрана, показваща състоянието на изтеглянето. Когато рестартирате компютъра, изтеглянето няма да бъде възобновено (ще трябва да изтеглите целия файл отново).

Използване на BITS за асинхронно копиране на големи файлове по мрежа

Процесът на изтегляне на файлове чрез BITS също може да започне в асинхронен режим, за това трябва да добавите параметъра към горната команда -асинхронни. В този режим, ако нещо се случи по време на изтеглянето на файла (рестартиране на сървъра, клиента, прекъсване на комуникационния канал и т.н.), задачата автоматично ще продължи след възстановяване на наличността на източника и изтеглянето на файлове ще продължи от момента, в който връзката е прекъсната..

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -дестинация c: \ temp -asynchronous

Важно е. По подразбиране Start-BitsTransfer работи с приоритет на преден план (възможно най-висок). Предполага се, че изтеглянето на файл, стартиран в този режим, ще се конкурира с други процеси за честотната лента на канала. За да избегнете това, трябва изрично да посочите всеки друг приоритет като аргумент на командата, например, -приоритет ниско:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -дестинация c: \ temp -asynchronous -Priority low

Асинхронна BITS задача работи във фонов режим и процесът на изпълнение на команда за качване на файл не се показва. Състоянието на BITS задание може да бъде получено от конзолата PowerShell с помощта на командата Get-BitsTransfer:

Get-BitsTransfer | ет

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

Можете да видите състоянието на всички задания на BITS, работещи на компютъра, в табличен вид:

Get-BitsTransfer | изберете DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize

При използване на асинхронен режим на прехвърляне се създава временен файл с разширението TMP в целевата директория (скрит по подразбиране в изследователя). За да го преобразувате в оригиналния тип файл (който се съхранява на изходния сървър), трябва да стартирате командата Complete-BitsTransfer:

Get-BitsTransfer | Пълна-BitsTransfer

Задачата за изтегляне на BITS след това се счита за завършена и изчезва от списъка със задачи..

Можете да качите локален файл в споделена мрежова папка на отдалечен сървър. За да направите това, използвайте следната команда (за удобство можете да посочите името на заданието за копиране):

Start-BitsTransfer -Source C: \ iso \ w101809.iso -Определяне \\ ekt-fs1 \ iso -Asynchronous -DisplayName CopyISOtoEKT

За да спрете временно BITS задача, направете:

Get-BitsTransfer -Наименование CopyISOtoEKT | Suspend-BitsTransfer

За да продължите работата, използвайте командлета Resume-BitsTransfer:

Get-BitsTransfer -Наименование CopyISOtoEKT | Resume-BitsTransfer -Asynchronous

Можете да добавите допълнителни файлове към BITS задачата с помощта на командлета Add-BitsFile:

Get-BitsTransfer -Наименование CopyISOtoEKT | Add-BitsFile -Source C: \ iso \ w10msu \ * -Определяне \\ ekt-fs1 \ iso -Asynchronous

За да изтриете всички задания за изтегляне на BITS на компютъра (включително тези, стартирани от други потребители), изпълнете командата:

Get-BitsTransfer -Allusers | Remove-BitsTransfer

Не можете да отмените BITS задачи, стартирани от под Система (грешка 0x80070005 Не може да се отмени заданието). За да отмените тази задача, трябва да стартирате командата Remove-BitsTransfer от под SYSTEM.

Ако сървърът, на който се съхранява файлът, изисква удостоверяване на потребителя, можете да извикате прозорец, в който се нуждаете от идентификационни данни за достъп до ресурса:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -дестинация c: \ temp -asynchronous -Priority low -Authentication NTLM -Credential Get-Credential

За да улесните проследяването на резултатите от BITS задачата, можете да използвате обикновен скрипт, който следи задачата и показва процента на зареждане на екрана на всеки няколко секунди. В края на изтеглянето на файла скриптът автоматично преобразува TMP файла в оригиналния му формат:

Импорт-модул BitsTransfer
$ job = Start-BitsTransfer -Source _http: //10.2.2.148/erd65_32.iso -Определение c: \ temp -Asynchronous
докато (($ job.JobState.ToString () -eq 'Прехвърляне') -or ($ job.JobState.ToString () -eq 'Свързване'))

Запис на хост $ Job.JobState.ToString ()
$ Pro = ($ job.BytesTransferred / $ job.BytesTotal) * 100
Напишете-хост $ Pro „%“
Сън 3

Изпълнение на BitsTransfer -BitsJob $

Копиране на цялото съдържание на мрежов дял чрез BITS

Както вече казахме, BITS не се нуждае от уеб сървър за работа, това означава, че можете да копирате файлове директно от други компютри с Windows или споделени мрежови папки:

Start-BitsTransfer -Source \\ msk-rep01 \ os \ rhel-server-7.0-x86_64-dvd.iso -Определение c: \ temp -Asynchronous

Командлетите на модула BitsTransfer не могат да копират рекурсивно всички файлове и папки от конкретна директория или файлове, които се използват от други програми. За да копирате всички файлове с поддиректории от посочената папка на мрежата, използвайте тази функция (първо можете да проверите дали целевата директория съществува и да я създадете):

Импорт-модул BitsTransfer
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
if (-Not (Тест-път $ Дестинация))

$ null = New-Item -Path $ Destination -ItemType Directory

$ folders = Get-ChildItem -Name -Path $ source -Directory -Recurse
$ job = Start-BitsTransfer -Source $ Source \ *. * -Определение $ Destination -asynchronous -Prityity low
докато (($ job.JobState.ToString () -eq 'Прехвърляне') -or ($ job.JobState.ToString () -eq 'Свързване'))

Сън 3

Изпълнение на BitsTransfer -BitsJob $
foreach ($ i в $ папки)

$ postoji = Тест-път $ Дестинация \ $ i
if ($ съществува -eq $ false) Нов елемент $ Дестинация \ $ i -ItemType Directory
$ task = Start-BitsTransfer -Source $ Source \ $ i \ *. * -Определение $ Destination \ $ i -asynchronous -Prityity low
докато (($ job.JobState.ToString () -eq 'Прехвърляне') -or ($ job.JobState.ToString () -eq 'Свързване'))

Сън 3

Изпълнение на BitsTransfer -BitsJob $


Качване на файл на HTTP сървър с помощта на PowerShell и BITS

Използвайки BITS, можете не само да изтеглите файл от HTTP сървър, но и да го качите на отдалечен уеб сървър. За целта уеб сървърът IIS с инсталирания компонент трябва да бъде инсталиран от страна на получателя Bits Сървър разширение. В настройките на виртуалната директория IIS в секцията Bits Качването трябва да активирате опцията "Позволете клиенти за качени файлове".

Ако използвате анонимно разрешение, трябва да разрешите на анонимните потребители да пишат в директорията на ниво NTFS. Ако изтеглянето на файл се извършва от оторизирани потребители, те трябва да получат разрешения за RW в папката за изтегляне.

За да качите файла на HTTP сървъра с помощта на BITS протокола, изпълнете командата:

Start-bits -source c: \ iso \ win2016.iso -дестинация http://10.10.1.200/MEDVImages/win2016.iso-Качване на трансферти

Моля, обърнете внимание, че по подразбиране IIS ви позволява да качвате файлове с размер до 30 MB. За да можете да качите големи файлове, трябва да промените стойността в параметъра maxAllowContentLength във файла web.config.

По този начин използването на BITS функции е отлична алтернатива на традиционното копиране на файлове през мрежата чрез SMB протокол. За разлика от последното, задачата за копиране на BITS файлове се изпълнява въпреки прекъсване на връзката и рестартиране на компютри и не зарежда комуникационния канал, без да пречи на работата на други мрежови приложения и потребители. BITS протоколът може да бъде оптималното решение за прехвърляне на големи ISO файлове с изображения и файлове на виртуални машини (vmdk, vhdx) през WAN мрежа.