Skopírujte veľké súbory v sieti pomocou služieb BITS a PowerShell

V lokálnych (a globálnych) sieťach sa súbory medzi systémami zvyčajne prenášajú pomocou protokolov SMB, FTP alebo HTTP. Problém so všetkými týmito protokolmi je problém so sťahovaním veľkých súborov, ktoré môžu zhoršiť problémy s prenosom údajov cez pomalý alebo nestabilný kanál. Pri kopírovaní súborov pomocou týchto protokolov sa zvyčajne používa všetka dostupná šírka pásma komunikačného kanála medzi serverom a príjemcom, čo môže nepriaznivo ovplyvniť výkon siete a ďalšie aplikácie (nie vždy je možné nakonfigurovať správne politiky QoS na úrovni sieťových zariadení). V tomto článku zvážime možnosť použitia protokolu. BITS a cmdlets PowerShell kopírovať veľké súbory v sieti prostredníctvom nestabilného alebo pomalého kanála.

obsah:

  • Protokol BITS
  • BITS: Požiadavky na verziu OS a PowerShell
  • Ako sťahovať súbor pomocou protokolu BITS pomocou PowerShell
  • Synchrónny prenos súborov medzi počítačmi pomocou BITS
  • Použitie služby BITS na asynchrónne kopírovanie veľkých súborov v sieti
  • Kopírovanie celého obsahu sieťového zdieľania prostredníctvom služby BITS
  • Odovzdanie súboru na server HTTP pomocou PowerShell a BITS

Protokol BITS

BITS alebo pozadia inteligentný prevod služba - (Background Intelligent Transfer Service) je služba Windows, ktorá sa používa na prenos súborov medzi systémami. Pomocou protokolu BITS môžete prenášať aj sťahovať a nahrávať súbory. Podľa tohto protokolu počítače sťahujú súbory zo serverov pri automatickej aktualizácii systému Windows (vrátane sťahovania aktualizácií zo servera WSUS), pri prijímaní programov z distribučných miest SCCM atď..

Výhody protokolu BITS:

  • BITS je inteligentný protokol, ktorý je počas prevádzky schopný regulovať použitú šírku pásma komunikačného kanála tak, aby neovplyvnil iné sieťové aplikácie a služby. Služba BITS môže počas prevádzky využívať iba nepridelenú šírku pásma kanála a dynamicky meniť rýchlosť prenosu údajov (ak iné aplikácie zvýšia zaťaženie siete, služba BITS môže znížiť rýchlosť prenosu dát cez sieť);
  • Stiahnutie súboru môže ísť na pozadí, neviditeľne pre používateľa;
  • Úloha BITS v režime pokračovania automaticky pokračuje, aj keď sa komunikačný kanál medzi počítačom a klientom preruší alebo po reštarte počítača;
  • Sťahovanie prostredníctvom služby BITS môžete kedykoľvek pozastaviť alebo obnoviť bez straty údajov;poznámka. Možnosť reštartovania postupu kopírovania súborov v sieti je tiež k dispozícii v nástroji robocopy.exe, ktorý vám umožňuje pokračovať v sťahovaní súboru v prípade zlyhania pripojenia..
  • Služba BITS vám umožňuje spravovať priority úloh pri spúšťaní;
  • Prenos súborov medzi počítačmi sa uskutočňuje na portoch 80 (HTTP) alebo 443 (HTTPS), takže na firewalloch nemusíte otvárať ďalšie porty. Napríklad 445 portov, ktoré sa kopírujú pri použití protokolu SMB (nezabudnite, že v starších verziách protokolu SMB 1.0 je veľa zraniteľností);
  • Na strane príjemcu a servera nie je potrebný nasadený server IIS.

Preto je BITS optimálnym protokolom na prenos veľkých súborov cez pomalé a nestabilné siete (satelitný kanál, GPRS pripojenie atď.).

BITS: Požiadavky na verziu OS a PowerShell

Protokol BITS bol prvýkrát zavedený v systéme Windows XP na správu úloh BITS, v ktorých bolo možné použiť tento nástroj bitsadmin.exe. Obslužný program je stále podporovaný, ale je zastaraný. Na správu úloh BITS je lepšie použiť špeciálne rutiny PowerShell.

Aby sme mohli pracovať v tomto scenári, potrebujeme operačný systém nie nižší ako Windows Vista alebo Windows Server 2008 a PowerShell nie nižší ako verzia 2.0. Moderné verzie systému Windows 10 a Windows Server 2016/2012 R2 plne podporujú protokol BITS.

rada. Je možné používať Windows Server 2003. V takom prípade budete musieť nainštalovať špeciálne aktualizácie KB 923845 a PowerShell V2.0..

Podpora BITS sa vyžaduje na strane klienta aj servera.

Ako sťahovať súbor pomocou protokolu BITS pomocou PowerShell

Predpokladajme, že chcete stiahnuť veľký súbor ISO uložený na serveri IIS HTTP (_http: //10.2.2.148/erd65_32.iso).

Predpokladá sa, že na túto adresu URL je povolený anonymný prístup (v budúcnosti zvážime prístup na adresu URL s overením).

Najskôr načítajte podporný modul BITS do relácie PowerShell:

Import modulu BitsTransfer

Po načítaní modulu môžete zobraziť všetky dostupné príkazy modulu BitsTransfer:

get-command * -BITS *

Ako vidíte, je k dispozícii iba 8 cmdletov:

  • Add-BitsFile
  • Kompletné-BitsTransfer
  • Get-BitsTransfer
  • Remove-BitsTransfer
  • Resume-BitsTransfer
  • Set-BitsTransfer
  • Start-BitsTransfer
  • Suspend-BitsTransfer

Synchrónny prenos súborov medzi počítačmi pomocou BITS

Rutina Start-BitsTransfer vám umožňuje sťahovať súbory cez HTTP (a tiež cmdlet Invoke-WebRequest) a zo zdieľaných sieťových priečinkov (cez SMB). Ak chcete stiahnuť súbor zo zadanej adresy URL pomocou protokolu BITS a uložiť ho do lokálneho adresára C: \ Temp, použite príkaz:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destination c: \ temp

správa Ide o prenos súborov, ktorý využíva službu inteligentného prenosu na pozadí (BITS). hovorí, že sťahovanie špecifikovaného súboru pomocou protokolu BITS sa začalo.

V tomto príklade cmdlet stiahne súbor synchrónne. Stiahnutie súboru pripomína obvyklý postup kopírovania prostredníctvom Prieskumníka alebo pomocou položky PoSh cmdlet Copy-Item. V takom prípade sa na obrazovke zobrazí indikátor priebehu, ktorý zobrazuje stav sťahovania. Po reštartovaní počítača sa sťahovanie nepokračuje (budete musieť znova stiahnuť celý súbor).

Použitie služby BITS na asynchrónne kopírovanie veľkých súborov v sieti

Proces sťahovania súborov cez BITS je možné spustiť aj v asynchrónnom režime, preto je potrebné do vyššie uvedeného príkazu pridať parameter. -asynchrónne. V tomto režime, ak sa niečo stane počas sťahovania súboru (reštartovanie servera, klienta, odpojenie komunikačného kanála atď.), Úloha bude automaticky pokračovať po obnovení dostupnosti zdroja a sťahovanie súboru bude pokračovať od momentu prerušenia spojenia..

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destination c: \ temp -asynchronous

Je dôležité. V predvolenom nastavení Start-BitsTransfer pracuje s prioritou v popredí (najvyššia možná). Predpokladá sa, že sťahovanie súboru spusteného v tomto režime bude konkurovať iným procesom šírky pásma kanála. Aby ste tomu zabránili, musíte napríklad ako argument k príkazu explicitne zadať akúkoľvek inú prioritu, -priorita nízky:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destination c: \ temp -asynchronous -Priority low

Na pozadí sa spustí asynchrónna úloha BITS a proces vykonania príkazu na odovzdanie súboru sa nezobrazí. Stav úlohy BITS je možné získať z konzoly PowerShell pomocou príkazu Get-BitsTransfer:

Get-BitsTransfer | fl

Príkaz vráti stav prenosu (v tomto prípade je zrejmé, že prenos je ukončený - prenesený), informácie o počte prenesených bajtov, celkovej veľkosti súboru, čase vytvorenia a dokončenia úlohy BITS..

Stav všetkých úloh BITS spustených v počítači si môžete zobraziť v tabuľkovej podobe:

Get-BitsTransfer | vyberte DisplayName, BytesTotal, BytesTransferred, JobState | Tabuľka formátu -AutoSize

Pri použití režimu asynchrónneho prenosu sa v cieľovom adresári vytvorí dočasný súbor s príponou TMP (v predvolenom nastavení v prieskumníkovi skrytý). Ak ju chcete previesť na pôvodný typ súboru (ktorý je uložený na zdrojovom serveri), musíte spustiť príkaz Complete-BitsTransfer:

Get-BitsTransfer | Kompletné-BitsTransfer

Úloha sťahovania BITS sa potom považuje za dokončenú a zmizne zo zoznamu úloh..

Lokálny súbor môžete nahrať do zdieľaného sieťového priečinka na vzdialenom serveri. Použite nasledujúci príkaz (pre zjednodušenie môžete zadať názov úlohy kopírovania):

Start-BitsTransfer -Source C: \ iso \ w101809.iso - Destination \\ ekt-fs1 \ iso -Asynchronous -DisplayName CopyISOtoEKT

Ak chcete dočasne pozastaviť úlohu BITS, postupujte takto:

Get-BitsTransfer - meno CopyISOtoEKT | Suspend-BitsTransfer

Ak chcete pokračovať v práci, použite rutinu Resume-BitsTransfer:

Get-BitsTransfer - meno CopyISOtoEKT | Obnoviť-BitsTransfer -Asynchronous

Do roly BITS môžete pridať ďalšie súbory pomocou rutiny Add-BitsFile:

Get-BitsTransfer - meno CopyISOtoEKT | Add-BitsFile -Source C: \ iso \ w10msu \ * -Destination \\ ekt-fs1 \ iso -Asynchronous

Ak chcete odstrániť všetky úlohy sťahovania BITS v počítači (vrátane tých, ktoré spustili iní používatelia), spustite príkaz:

Get-BitsTransfer -Allusers | Remove-BitsTransfer

Nemôžete zrušiť úlohy BITS spustené zo systému (chyba 0x80070005 Nemožno zrušiť úlohu). Ak chcete zrušiť túto úlohu, musíte spustiť príkaz Remove-BitsTransfer z časti SYSTEM.

Ak server, na ktorom je uložený súbor, vyžaduje overenie používateľa, môžete vyvolať okno, v ktorom potrebujete prihlasovacie údaje na prístup k prostriedku:

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

Na uľahčenie sledovania výsledkov úlohy BITS môžete použiť jednoduchý skript, ktorý úlohu monitoruje a zobrazuje percento načítania na obrazovke každých niekoľko sekúnd. Na konci sťahovania súboru skript automaticky skonvertuje súbor TMP do pôvodného formátu:

Import modulu BitsTransfer
$ job = Start-BitsTransfer -Source _http: //10.2.2.148/erd65_32.iso -Destination c: \ temp -Asynchronous
while (($ job.JobState.ToString () -eq 'Transfering') - alebo ($ job.JobState.ToString () -eq 'Connecting')))

Hostiteľ $ Job.JobState.ToString ()
$ Pro = ($ job.BytesTransferred / $ job.BytesCotal) * 100
Write-Host $ Pro „%“
Spánok 3

Úloha Complete-BitsTransfer -BitsJob $

Kopírovanie celého obsahu sieťového zdieľania prostredníctvom služby BITS

Ako sme už uviedli, služba BITS nepotrebuje na fungovanie webový server, čo znamená, že môžete kopírovať súbory priamo z iných počítačov so systémom Windows alebo zdieľaných sieťových priečinkov:

Start-BitsTransfer -Source \\ msk-rep01 \ os \ rhel-server-7.0-x86_64-dvd.iso -Destinácia c: \ temp -Asynchronous

Program cmdlets modulu BitsTransfer nedokáže rekurzívne kopírovať všetky súbory a priečinky z konkrétneho adresára alebo súbory, ktoré používajú iné programy. Ak chcete skopírovať všetky súbory s podadresármi z určeného sieťového priečinka, použite túto funkciu (najskôr môžete skontrolovať, či cieľový adresár existuje a vytvoriť ho):

Import modulu BitsTransfer
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
ak (- Nie (cieľ cesty testovacej cesty $))

$ null = Nová položka - Cesta $ Cieľ -ItemType Adresár

$ folders = Get-ChildItem -Name -ath $ source -Directory -Recurse
$ job = Start-BitsTransfer -Source $ Source \ *. * -Destination $ Destination -asynchronous -Priority low
while (($ job.JobState.ToString () -eq 'Transfering') - alebo ($ job.JobState.ToString () -eq 'Connecting')))

Spánok 3

Úloha Complete-BitsTransfer -BitsJob $
foreach ($ i v $ priečinkoch)

$ existuje = testovacia cesta $ Cieľ \ $ i
if ($ existuje -eq $ false) New-Item $ Destination \ $ i -ItemType Directory
$ job = Start-BitsTransfer -Source $ Source \ $ i \ *. * -Dominácia $ Destination \ $ i -asynchronous -Priority low
while (($ job.JobState.ToString () -eq 'Transfering') - alebo ($ job.JobState.ToString () -eq 'Connecting')))

Spánok 3

Úloha Complete-BitsTransfer -BitsJob $


Odovzdanie súboru na server HTTP pomocou PowerShell a BITS

Pomocou služby BITS môžete nielen stiahnuť súbor zo servera HTTP, ale tiež ho preniesť na vzdialený webový server. Na tento účel musí byť na strane príjemcu nainštalovaný webový server IIS s nainštalovaným komponentom bity server predĺženie. V nastaveniach virtuálneho adresára IIS v sekcii bity nahranie potreba povoliť voľbu "dovoliť klienti na nahranie súbory".

Ak používate anonymnú autorizáciu, musíte povoliť anonymným používateľom zapisovať do adresára na úrovni NTFS. Ak sa sťahovanie súborov vykonáva pod autorizovanými používateľmi, musí im byť udelené povolenie RW na priečinok sťahovania.

Ak chcete nahrať súbor na server HTTP pomocou protokolu BITS, spustite príkaz:

Start-bit-zdroj c: \ iso \ win2016.iso -destinácia http://10.10.1.200/MEDVImages/win2016.iso -Transfertype Upload

Upozorňujeme, že v predvolenom nastavení vám služba IIS umožňuje nahrávať súbory do 30 MB. Ak chcete povoliť odovzdávanie veľkých súborov, musíte zmeniť hodnotu parametra maxAllowContentLength v súbore web.config..

Použitie funkcií BITS je teda vynikajúcou alternatívou k tradičnému kopírovaniu súborov v sieti pomocou protokolu SMB. Na rozdiel od toho sa úloha kopírovania súborov BITS vykonáva napriek odpojeniu a reštartovaniu počítačov a nezaťažuje komunikačný kanál bez zasahovania do iných sieťových aplikácií a používateľov. Protokol BITS môže byť najlepším riešením na prenos veľkých obrazových súborov ISO a súborov virtuálnych strojov (vmdk, vhdx) cez sieť WAN.