Kopirajte velike datoteke prek omrežja s pomočjo BITS in PowerShell

V lokalnih (in globalnih) omrežjih se datoteke med sistemi običajno prenašajo s protokoli SMB, FTP ali HTTP. Težava vseh teh protokolov je težava prenosa velikih datotek, ki jo lahko poslabšajo težave prenosa podatkov po počasnem ali nestabilnem kanalu. Pri kopiranju datotek s temi protokoli se običajno uporablja vsa razpoložljiva pasovna širina komunikacijskega kanala med strežnikom in prejemnikom, kar lahko negativno vpliva na delovanje omrežja in druge aplikacije (ni vedno mogoče konfigurirati pravilnih pravil QoS na ravni omrežne opreme). V tem članku bomo razmislili o možnosti uporabe protokola. Bits in cmdleti Powerhell kopiranje velikih datotek preko omrežja preko nestabilnega ali počasnega kanala.

Vsebina:

  • BITS protokol
  • BITS: Zahteve za OS in PowerShell
  • Kako prenesti datoteko s protokolom BITS s pomočjo PowerShell-a
  • Sinhroni prenos datotek med računalniki z uporabo BITS
  • Uporaba BITS za asinhrono kopiranje velikih datotek preko omrežja
  • Kopiranje celotne vsebine skupnega omrežja prek BITS
  • Prenos datoteke na strežnik HTTP s pomočjo PowerShell in BITS

BITS protokol

Bits ali Ozadje Inteligentni Prenos storitev - (Background Intelligent Transfer Service) je storitev Windows, ki se uporablja za prenos datotek med sistemi. S protokolom BITS lahko prenesete datoteke za prenos in nalaganje. V skladu s tem protokolom računalniki prenašajo datoteke s strežnikov pri samodejni posodobitvi sistema Windows (tudi pri prenosu posodobitev s strežnika WSUS), pri prejemanju programov iz distribucijskih točk SCCM itd..

Prednosti protokola BITS:

  • BITS je inteligentni protokol, ki lahko med delovanjem uravnava uporabljeno pasovno širino komunikacijskega kanala, tako da ne vpliva na druge omrežne aplikacije in storitve. BITS lahko uporablja samo nerazporejeno pasovno širino kanala in med delovanjem dinamično spreminja hitrost prenosa podatkov (če druge aplikacije povečajo obremenitev omrežja, lahko BITS zmanjša hitrost prenosa podatkov po omrežju);
  • Prenos datotek lahko poteka v ozadju, nevidno za uporabnika;
  • Naloga BITS v načinu nadaljevanja se samodejno nadaljuje, tudi če se komunikacijski kanal med računalnikom in odjemalcem prekine ali po ponovnem zagonu računalnika;
  • Kadar koli lahko zaustavite ali nadaljujete s prenosom prek BITS brez izgube podatkov;Opomba. Možnost ponovnega zagona postopka kopiranja datotek po omrežju je na voljo tudi v pripomočku robocopy.exe, ki omogoča nadaljevanje prenosa datoteke v primeru izpada povezave.
  • BITS omogoča upravljanje prednostnih nalog zagona;
  • Prenos datotek med računalniki se zgodi na vratih 80 (HTTP) ali 443 (HTTPS), zato vam na požarnih zidovih ni treba odpirati dodatnih vrat. Na primer 445 vrat, ki se kopirajo pri uporabi protokola SMB (ne pozabite, da je v starejših različicah protokola SMB 1.0 veliko ranljivosti);
  • Na strani prejemnika in strežnika nameščen strežnik IIS ni potreben.

Tako je BITS optimalen protokol za prenos velikih datotek po počasnih in nestabilnih omrežjih (satelitski kanal, GPRS povezava itd.).

BITS: Zahteve za OS in PowerShell

Protokol BITS je bil prvič predstavljen v operacijskem sistemu Windows XP za upravljanje BITS opravil, v katerih je bilo mogoče uporabiti pripomoček bitsadmin.exe. Program je še vedno podprt, vendar je opuščen. Za upravljanje BITS opravil je bolje uporabiti posebne PowerShell cmdlete.

Za delo v tem scenariju potrebujemo operacijski sistem, ki ni nižji od sistema Windows Vista ali Windows Server 2008, PowerShell pa nižji od različice 2.0. Sodobne različice sistema Windows 10 in Windows Server 2016/2012 R2 v celoti podpirajo protokol BITS.

Namig. Možno je uporabljati Windows Server 2003. V tem primeru boste morali namestiti posebne posodobitve KB 923845 in PowerShell V2.0.

Podpora za BITS je potrebna tako na strani odjemalca kot na strežniku.

Kako prenesti datoteko s protokolom BITS s pomočjo PowerShell-a

Recimo, da želite prenesti veliko ISO datoteko, shranjeno na strežniku IIS HTTP (_http: //10.2.2.148/erd65_32.iso).

Domnevamo, da je do tega URL-ja dovoljen anonimni dostop (v prihodnosti bomo dostop do URL-ja obravnavali s preverjanjem pristnosti).

Najprej naložite podporni modul BITS v sejo PowerShell:

Uvoz-modul BitsTransfer

Po nalaganju modula lahko seznam vseh razpoložljivih ukazov modula BitsTransfer:

get-ukaz * -BITS *

Kot vidite, je na voljo le 8 cmdlet:

  • Datoteka z dodatki
  • Celotni BitsTransfer
  • Get-BitsTransfer
  • Odstrani-BitsTransfer
  • Nadaljuj BitsTransfer
  • Set-BitsTransfer
  • Start-BitsTransfer
  • Suspend-BitsTransfer

Sinhroni prenos datotek med računalniki z uporabo BITS

Cmdlet Start-BitsTransfer omogoča prenos datotek prek HTTP-ov (kot tudi cmdlet Invoke-WebRequest) in iz skupnih mrežnih map (prek SMB). Če želite s protokola BITS prenesti datoteko z določenega naslova URL in jo shraniti v lokalni imenik C: \ Temp, uporabite ukaz:

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

Sporočilo To je prenos datotek, ki uporablja storitev BITS (Background Intelligent Transfer Transfer) pravi, da se je začetek prenosa določene datoteke s protokolom BITS začel.

V tem primeru cmdlet datoteko prenese sinhrono. Prenos datoteke je podoben običajnemu postopku kopiranja prek Explorerja ali s pomočjo PoSh cmdlet Copy-Item. V tem primeru se na zaslonu prikaže vrstica napredka, ki prikazuje stanje prenosa. Ko znova zaženete računalnik, se prenos ne bo nadaljeval (celotno datoteko boste morali naložiti znova).

Uporaba BITS za asinhrono kopiranje velikih datotek preko omrežja

Postopek nalaganja datotek prek BITS-a se lahko začne tudi v asinhronem načinu, za to morate dodati zgornji ukaz -asinhrono. V tem načinu, če se med prenosom datoteke nekaj zgodi (ponovni zagon strežnika, odjemalca, prekinitev komunikacijskega kanala itd.), Se bo naloga samodejno nadaljevala po obnovitvi razpoložljivosti vira in prenos datotek se bo nadaljeval od trenutka, ko je povezava prekinjena..

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

Je pomembno. Start-BitsTransfer privzeto deluje s prednostno nalogo (najviši možni). Domneva se, da bo prenos datoteke, zagnane v tem načinu, konkurenčen drugim procesom glede pasovne širine kanala. Če se želite temu izogniti, morate na primer izrecno navesti vsako drugo prednostno nalogo kot argument, -Prednost nizka:

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

Asinhrono opravilo BITS teče v ozadju in postopek izvršitve ukaza za nalaganje datotek se ne prikaže. Status opravila BITS lahko dobite na konzoli PowerShell s pomočjo ukaza Get-BitsTransfer:

Get-BitsTransfer | fl

Ukaz vrne status prenosa (v tem primeru je jasno, da je prenos končan -Transferred), informacije o številu prenesenih bajtov, skupni velikosti datoteke, času izdelave in zaključka opravila BITS.

Stanje vseh opravil BITS, ki se izvajajo v računalniku, si lahko ogledate v tabeli:

Get-BitsTransfer | izberite DisplayName, BytesTotal, BytesTransferred, JobState | Format-Tabela -AutoSize

Pri uporabi asinhronega načina prenosa se v ciljnem imeniku ustvari začasna datoteka s pripono TMP (privzeto skrita v raziskovalcu). Če ga želite pretvoriti v prvotno vrsto datoteke (ki je shranjena na izvornem strežniku), morate zagnati ukaz Complete-BitsTransfer:

Get-BitsTransfer | Celotni BitsTransfer

Naloga za prenos BITS se po tem šteje za zaključeno in izgine s seznama opravil..

Lokalno datoteko lahko naložite v skupno omrežno mapo na oddaljenem strežniku. Če želite to narediti, uporabite naslednji ukaz (za udobje lahko določite ime opravila kopiranja):

Start-BitsTransfer -Source C: \ iso \ w101809.iso -Odredenost \\ ekt-fs1 \ iso -Asinhrono -DisplayName CopyISOtoEKT

Če želite začasno zaustaviti BITS opravilo, naredite:

Get-BitsTransfer -Ime CopyISOtoEKT | Suspend-BitsTransfer

Če želite nadaljevati z delom, uporabite ukazni ukaz Resume-BitsTransfer:

Get-BitsTransfer -Ime CopyISOtoEKT | Nadaljuj-BitsTransfer -Asinhrono

V ukazno nalogo BITS lahko dodate dodatne datoteke z ukaznim ukazom Add-BitsFile:

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

Če želite izbrisati vsa opravila za prenos BITS v računalnik (vključno s tistimi, ki so jih sprožili drugi uporabniki), zaženite ukaz:

Get-BitsTransfer -Allusers | Odstrani-BitsTransfer

Ne morete preklicati BITS-ovih opravil, zagnanih iz sistema (napaka 0x80070005 Opravila ni mogoče preklicati). Če želite preklicati to nalogo, zaženite ukaz Remove-BitsTransfer iz sistema SYSTEM.

Če strežnik, na katerem je datoteka shranjena, zahteva preverjanje pristnosti uporabnika, lahko pokličete okno, v katerem za dostop do vira potrebujete poverilnice:

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

Za lažje sledenje rezultatov naloge BITS lahko uporabite preprost skript, ki nadzoruje nalogo in vsakih nekaj sekund prikaže odstotek nalaganja na zaslonu. Na koncu prenosa datoteke skript samodejno pretvori datoteko TMP v prvotno obliko:

Uvoz-modul BitsTransfer
$ job = Start-BitsTransfer -Source _http: //10.2.2.148/erd65_32.iso -Odreditev c: \ temp -Asynchronous
medtem ko (($ job.JobState.ToString () -eq 'Prenos') -or ($ job.JobState.ToString () -eq 'Povezovanje'))

Host za pisanje $ Job.JobState.ToString ()
$ Pro = ($ job.BytesTransferred / $ job.BytesTotal) * 100
Host za pisanje $ Pro „%“
Spanje 3

Opravilo Complete-BitsTransfer -BitsJob $

Kopiranje celotne vsebine skupnega omrežja prek BITS

Kot smo že rekli, BITS ne potrebuje spletnega strežnika, kar pomeni, da lahko datoteke kopirate neposredno iz drugih računalnikov z Windows ali iz skupnih mrežnih map:

Start-BitsTransfer -Sred \\ msk-rep01 \ os \ rhel-server-7.0-x86_64-dvd.iso -Odreditev c: \ temp -Asynchronous

Cmdleti modula BitsTransfer ne morejo rekurzivno kopirati vseh datotek in map iz določenega imenika ali datotek, ki jih uporabljajo drugi programi. Če želite kopirati vse datoteke s podmapami iz podane omrežne mape, uporabite to funkcijo (najprej lahko preverite, ali ciljni imenik obstaja, in ga ustvarite):

Uvoz-modul BitsTransfer
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
če (-Ne (destinacija preskusne poti $))

$ null = Nov element-Pot do cilja - Imenik vrste

$ map = Get-ChildItem -Name -Path $ source -Directory -Recurse
$ job = Start-BitsTransfer -Source $ Source \ *. * -Namestitev $ Destination -asynchronous -Prityity low
medtem ko (($ job.JobState.ToString () -eq 'Prenos') -or ($ job.JobState.ToString () -eq 'Povezovanje'))

Spanje 3

Opravilo Complete-BitsTransfer -BitsJob $
foreach ($ i v $ map)

$ postoji = Namen preizkusne poti $ $ $ i
če ($ obstaja -eq $ false) Nov predmet $ Destination \ $ i -ItemType Directory
$ job = Start-BitsTransfer -Source $ Source \ $ i \ *. * -Namestitev $ Destination \ $ i -asynchronous -Prityity low
medtem ko (($ job.JobState.ToString () -eq 'Prenos') -or ($ job.JobState.ToString () -eq 'Povezovanje'))

Spanje 3

Opravilo Complete-BitsTransfer -BitsJob $


Prenos datoteke na strežnik HTTP s pomočjo PowerShell in BITS

Z uporabo BITS datoteke ne morete samo prenesti s strežnika HTTP, ampak tudi naložiti na oddaljeni spletni strežnik. Če želite to narediti, mora biti na strani prejemnika nameščen spletni strežnik IIS z nameščeno komponento Bits Strežnik Podaljšek. V nastavitvah virtualnega imenika IIS v razdelku Bits Naloži treba omogočiti možnost "Dovoli stranke do prenosi datoteke".

Če uporabljate anonimno pooblastilo, morate dovoliti anonimnim uporabnikom pisanje v imenik na ravni NTFS. Če prenos datoteke poteka pri pooblaščenih uporabnikih, jim je treba v mapi za prenos dodeliti dovoljenja RW.

Če želite naložiti datoteko na strežnik HTTP po protokolu BITS, zaženite ukaz:

Start-bits -source c: \ iso \ win2016.iso -destination http://10.10.1.200/MEDVImages/win2016.iso -Prenos prenosov

Upoštevajte, da IIS privzeto omogoča nalaganje datotek do 30 MB. Če želite dovoliti nalaganje velikih datotek, morate spremeniti vrednost v parametru maxAllowContentLength v datoteki web.config.

Tako je uporaba funkcij BITS odlična alternativa tradicionalnemu kopiranju datotek po omrežju s protokolom SMB. Za razliko od slednjih se naloga kopiranja datotek BITS izvaja kljub odklopu in ponovnem zagonu računalnikov in ne nalaga komunikacijskega kanala, ne da bi motila delo drugih omrežnih aplikacij in uporabnikov. Protokol BITS je lahko optimalna rešitev za prenos velikih slikovnih datotek ISO in datotek virtualne naprave (vmdk, vhdx) po omrežju WAN.