Kopirajte velike datoteke putem mreže pomoću BITS i PowerShell

Na lokalnim (i globalnim) mrežama datoteke se između sustava obično prenose pomoću protokola SMB, FTP ili HTTP. Problem sa svim ovim protokolima je poteškoća s preuzimanjem velikih datoteka, što može biti pogoršano problemima prijenosa podataka po sporem ili nestabilnom kanalu. Pri kopiranju datoteka pomoću ovih protokola obično se koristi sva raspoloživa širina pojasa komunikacijskog kanala između poslužitelja i primatelja, što može negativno utjecati na rad mreže i ostale aplikacije (nije uvijek moguće konfigurirati ispravne QoS politike na razini mrežne opreme). U ovom ćemo članku razmotriti mogućnost korištenja protokola. bitova i cmdlets PowerShell za kopiranje velikih datoteka putem mreže preko nestabilnog ili sporog kanala.

sadržaj:

  • BITS protokol
  • BITS: Zahtjevi za OS i PowerShell verzije
  • Kako preuzeti datoteku pomoću BITS protokola pomoću PowerShell-a
  • Sinkroni prijenos datoteka između računala pomoću BITS-a
  • Upotreba BITS-a za asinhrono kopiranje velikih datoteka putem mreže
  • Kopiranje cjelokupnog sadržaja mrežnog udjela putem BITS-a
  • Prijenos datoteke na HTTP poslužitelj pomoću PowerShell-a i BITS-a

BITS protokol

bitova ili pozadina inteligentan prijenos usluga - (Background Intelligent Transfer Service) je Windows usluga koja se koristi za prijenos datoteka između sustava. Pomoću BITS protokola možete prenijeti i datoteke za preuzimanje i prijenos. Prema ovom protokolu računala preuzimaju datoteke s poslužitelja prilikom automatskog ažuriranja sustava Windows (uključujući pri preuzimanju ažuriranja s WSUS poslužitelja), prilikom primanja programa s SCCM distribucijskih mjesta itd..

Prednosti BITS protokola:

  • BITS je inteligentni protokol koji tijekom rada može regulirati korištenu propusnost komunikacijskog kanala tako da ne utječe na ostale mrežne aplikacije i usluge. BITS može koristiti samo neraspoređeni propusni opseg kanala i dinamički mijenjati brzinu prijenosa podataka tijekom rada (ako druge aplikacije povećavaju opterećenje mreže, BITS može smanjiti brzinu prijenosa podataka preko mreže);
  • Preuzimanje datoteka može ići u pozadini, nevidljivo za korisnika;
  • BITS posao u režimu za nastavak automatski će se nastaviti čak i ako se komunikacijski kanal između računala i klijenta prekine ili nakon što se računalo ponovo pokrene;
  • U bilo kojem trenutku možete pauzirati ili nastaviti s preuzimanjem putem BITS-a bez gubitka podataka;bilješka. Mogućnost ponovnog pokretanja postupka kopiranja datoteka putem mreže dostupna je i u uslužnom programu robocopy.exe koji vam omogućuje nastavak preuzimanja datoteke u slučaju neuspjeha veze..
  • BITS vam omogućuje upravljanje prioritetima zadataka za pokretanje;
  • Prijenos datoteka između računala događa se na priključcima 80 (HTTP) ili 443 (HTTPS), tako da ne morate otvarati dodatne portove na vatrozidima. Na primjer, 445 portova koji se kopiraju kada se koristi SMB protokol (ne zaboravite da postoji mnogo ranjivosti u starijim verzijama SMB 1.0 protokola);
  • Na strani primatelja i poslužitelja, implementirani IIS poslužitelj nije potreban.

Dakle, BITS je optimalan protokol za prijenos velikih datoteka putem sporih i nestabilnih mreža (satelitski kanal, GPRS veza itd.).

BITS: Zahtjevi za OS i PowerShell verzije

BITS protokol prvi je put uveden još u sustavu Windows XP za upravljanje BITS poslovima u kojima je bilo moguće koristiti uslužni program bitsadmin.eXE. Program se i dalje podržava, ali je zastario. Za upravljanje BITS poslovima, poželjno je koristiti posebne PowerShell cmdlete.

Da bismo radili u ovom scenariju, potreban nam je OS ne niži od sustava Windows Vista ili Windows Server 2008, a PowerShell ne niži od verzije 2.0. Moderne verzije sustava Windows 10 i Windows Server 2016/2012 R2 u potpunosti podržavaju BITS protokol.

vijeće. Moguće je koristiti Windows Server 2003. U ovom slučaju morat ćete instalirati posebna ažuriranja KB 923845 i PowerShell V2.0.

Podrška za BITS potrebna je i na strani klijenta i poslužitelja.

Kako preuzeti datoteku pomoću BITS protokola pomoću PowerShell-a

Pretpostavimo da želite preuzeti veliku ISO datoteku spremljenu na IIS HTTP poslužitelju (_http: //10.2.2.148/erd65_32.iso).

Pretpostavlja se da je anonimnom pristupu omogućen ovaj URL (ubuduće ćemo razmotriti pristup URL-u s autentifikacijom).

Prvo, učitajte BITS modul za podršku u PowerShell sesiju:

BitsTransfer modula uvoza

Nakon učitavanja modula možete navesti sve dostupne naredbe BitsTransfer modula:

get-naredba * -BITS *

Kao što vidite, dostupno je samo 8 cmdleta:

  • Add-BitsFile
  • Kompletan-BitsTransfer
  • Get-BitsTransfer
  • Uklonite-BitsTransfer
  • Nastavi-BitsTransfer
  • Set-BitsTransfer
  • Start-BitsTransfer
  • Obustaviti-BitsTransfer

Sinkroni prijenos datoteka između računala pomoću BITS-a

Start-BitsTransfer cmdlet omogućava preuzimanje datoteka putem HTTP-a (kao i cmdlet Invoke-WebRequest) i iz zajedničkih mrežnih mapa (putem SMB). Da biste preuzeli datoteku s određene URL adrese pomoću BITS protokola i spremili je u lokalni direktorij C: \ Temp, koristite naredbu:

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

poruka Ovo je prijenos datoteka koji koristi pozadinsku uslugu inteligentnog prijenosa (BITS) kaže da je započelo preuzimanje određene datoteke pomoću BITS protokola.

U ovom primjeru, cmdlet datoteku preuzima sinkrono. Preuzimanje datoteke nalikuje uobičajenom postupku kopiranja putem Explorera ili upotrebom PoSh cmdlet Copy-Item. U ovom se slučaju na zaslonu prikazuje traka napretka, koja prikazuje status za preuzimanje. Kada ponovo pokrenete računalo, preuzimanje se neće nastaviti (morat ćete ponovo preuzeti cijelu datoteku).

Upotreba BITS-a za asinhrono kopiranje velikih datoteka putem mreže

Proces preuzimanja datoteka putem BITS-a također se može pokrenuti u asinhronom načinu, za to morate dodati parametar gornjoj naredbi -asinhron. Ako se nešto dogodi tijekom preuzimanja datoteke (ponovno pokretanje poslužitelja, klijenta, prekid komunikacijskog kanala itd.), Zadatak će se automatski nastaviti nakon obnavljanja dostupnosti izvora, a preuzimanje datoteke nastavit će se od trenutka kad je veza prekinuta..

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

Važno je. Start-BitsTransfer po zadanom radi s prioritetom prednjeg plana (najviši mogući). Pretpostavlja se da će se preuzimanje datoteke pokrenute u ovom načinu nadmetati s drugim procesima za propusnost kanala. Da biste to izbjegli, na primjer morate eksplicitno navesti bilo koji drugi prioritet kao argument naredbi, -prioritet nizak:

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

Asinkroni BITS zadatak radi u pozadini, a postupak izvršenja naredbe za prijenos datoteke nije prikazan. Status BITS posla može se dobiti iz PowerShell konzole pomoću naredbe Get-BitsTransfer:

Get-BitsTransfer | Florida

Naredba vraća status prijenosa (u ovom slučaju jasno je da je prijenos gotov -Transferred), podatke o broju prenesenih bajtova, ukupnoj veličini datoteke, vremenima kreiranja i završetka BITS posla.

U tabličnom obliku možete vidjeti status svih BITS poslova koji se izvode na računalu:

Get-BitsTransfer | odaberite DisplayName, BytesTotal, BytesTransferred, JobState | Format-tablica -AutoSize

Pri korištenju asinhronog načina prijenosa stvara se privremena datoteka s TMP ekstenzijom u ciljnom direktoriju (skrivena po defaultu u istraživaču). Da biste je pretvorili u izvornu vrstu datoteke (koja je pohranjena na izvornom poslužitelju), morate pokrenuti naredbu Complete-BitsTransfer:

Get-BitsTransfer | Kompletan-BitsTransfer

Zadatak za preuzimanje BITS-a nakon toga se smatra dovršenim i nestaje s popisa zadataka..

Lokalnu datoteku možete prenijeti u zajedničku mrežnu mapu na udaljeni poslužitelj. Da biste to učinili, koristite sljedeću naredbu (radi praktičnosti možete navesti naziv posla kopiranja):

Start-BitsTransfer -Source C: \ iso \ w101809.iso -Odredba \\ ekt-fs1 \ iso -Asinkroni -DisplayName CopyISOtoEKT

Da biste privremeno obustavili BITS posao:

Get-BitsTransfer -Ime CopyISOtoEKT | Obustaviti-BitsTransfer

Za nastavak posla koristite cmdlet Resume-BitsTransfer:

Get-BitsTransfer -Ime CopyISOtoEKT | Nastavi-BitsTransfer -Asinhrono

U zadatak BITS možete dodati dodatne datoteke pomoću cmdleta Add-BitsFile:

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

Da biste izbrisali sve zadatke za preuzimanje BITS-a na računalu (uključujući one koje su pokrenuli drugi korisnici), pokrenite naredbu:

Get-BitsTransfer -Alluseri | Ukloni-BitsTransfer

Ne možete otkazati BITS zadatke pokrenute iz sustava (pogreška 0x80070005 Nije moguće otkazati posao). Da biste otkazali ovaj zadatak, trebate pokrenuti naredbu Remove-BitsTransfer iz sustava SYSTEM.

Ako poslužitelj na kojem se datoteka pohranjuje zahtijeva provjeru autentičnosti korisnika, možete pozvati prozor u kojem su vam potrebne vjerodajnice za pristup resursu:

Start-BitsTransfer -source _http: //10.2.2.148/erd65_32.iso -destinacija c: \ temp -asinhrono -Priority low -Auttikacija NTLM -Credential Get-Credential

Da biste lakše pratili rezultate BITS zadatka, možete koristiti jednostavnu skriptu koja nadgleda zadatak i prikazuje postotak učitavanja na zaslonu svakih nekoliko sekundi. Na kraju preuzimanja datoteke skripta automatski pretvara TMP datoteku u izvorni format:

BitsTransfer modula uvoza
$ posao = Start-BitsTransfer -Source _http: //10.2.2.148/erd65_32.iso -Odredenje c: \ temp -Asynchronous
dok (($ posao.JobState.ToString () -eq 'Prijenos') -or ($ posao.JobState.ToString () -eq 'Spajanje'))

Write-host $ Job.JobState.ToString ()
$ Pro = ($ posao.BytesTransferred / $ posao.BytesTotal) * 100
Host za pisanje $ Pro „%“
Spavanje 3

Posao s kompletnim BitsTransfer -BitsJob $

Kopiranje cjelokupnog sadržaja mrežnog udjela putem BITS-a

Kao što smo već rekli, BITS ne treba web poslužitelj, a to znači da možete kopirati datoteke izravno s drugih Windows računala ili zajedničkih mrežnih mapa:

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

Cmdleti modula BitsTransfer ne mogu rekurzivno kopirati sve datoteke i mape iz određenog direktorija ili datoteka koje koriste drugi programi. Da biste kopirali sve datoteke s podmapama iz određene mrežne mape, koristite ovu funkciju (prvo možete provjeriti postoji li ciljni direktorij i stvoriti je):

BitsTransfer modula uvoza
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
if (-Ne (odredište $ testnog puta))

$ null = Nova stavka-Put $ Odredište -ItemType Imenik

$ folders = Get-ChildItem -Name -Path $ source -Directory -Recurse
$ job = Start-BitsTransfer -Source $ Source \ *. * -Odredište $ Odredište -asinhrono -Prityity low
dok (($ posao.JobState.ToString () -eq 'Prijenos') -or ($ posao.JobState.ToString () -eq 'Spajanje'))

Spavanje 3

Posao s kompletnim BitsTransfer -BitsJob $
foreach ($ i u $ mapama)

$ postoji = Odrednica za testiranje $ \ $ i
if ($ postoji -eq $ false) Nova stavka $ Odredište \ $ i -ItemType Directory
$ job = Start-BitsTransfer -Source $ Source \ $ i \ *. * -Odredište $ Destination \ $ i -asynchronous -Prityity low
dok (($ posao.JobState.ToString () -eq 'Prijenos') -or ($ posao.JobState.ToString () -eq 'Spajanje'))

Spavanje 3

Posao s kompletnim BitsTransfer -BitsJob $


Prijenos datoteke na HTTP poslužitelj pomoću PowerShell-a i BITS-a

Pomoću BITS-a ne možete samo preuzeti datoteku s HTTP poslužitelja, već je i prenijeti na udaljeni web poslužitelj. Da biste to učinili, na strani primatelja mora biti instaliran IIS web poslužitelj s instaliranom komponentom bitovi server nastavak. U postavkama IIS virtualnog direktorija u odjeljku bitovi slike treba omogućiti mogućnost "dopustiti klijenti u slike slika".

Ako koristite anonimnu autorizaciju, anonimnim korisnicima morate omogućiti pisanje u direktorij na NTFS razini. Ako se preuzimanje datoteke vrši kod ovlaštenih korisnika, moraju im biti dodijeljena RW dopuštenja u mapi za preuzimanje.

Za prijenos datoteke na HTTP poslužitelj pomoću BITS protokola, pokrenite naredbu:

Startni bitovi-izvor c: \ iso \ win2016.iso -destinacija http://10.10.1.200/MEDVImages/win2016.iso-Prijenos transfera

Imajte na umu da IIS po zadanom omogućuje prijenos datoteka do 30 MB. Da biste omogućili prijenos velikih datoteka, morate promijeniti vrijednost u parametru maxAllowContentLength u datoteci web.config.

Stoga je korištenje BITS značajki izvrsna alternativa tradicionalnom kopiranju datoteka putem mreže pomoću SMB protokola. Za razliku od potonjeg, zadatak kopiranja BITS datoteka vrši se unatoč prekidu i ponovnom pokretanju računala, a ne opterećuje komunikacijski kanal bez ometanja rada ostalih mrežnih aplikacija i korisnika. BITS protokol može biti optimalno rješenje za prijenos velikih ISO slikovnih datoteka i datoteka virtualnih računala (vmdk, vhdx) preko WAN mreže.