Zkopírujte velké soubory v síti pomocí BITS a PowerShell

V lokálních (a globálních) sítích se soubory mezi systémy obvykle přenášejí pomocí protokolů SMB, FTP nebo HTTP. Problém se všemi těmito protokoly je obtížnost stahování velkých souborů, což může být zhoršeno problémy s přenosem dat přes pomalý nebo nestabilní kanál. Při kopírování souborů pomocí těchto protokolů se obvykle používá veškerá dostupná šířka komunikačního kanálu mezi serverem a příjemcem, což může negativně ovlivnit výkon sítě a další aplikace (není vždy možné nakonfigurovat správné zásady QoS na úrovni síťových zařízení). V tomto článku budeme zvažovat možnost použití protokolu. Bity a cmdlets Powerhell kopírování velkých souborů v síti prostřednictvím nestabilního nebo pomalého kanálu.

Obsah:

  • Protokol BITS
  • BITS: Požadavky na verzi OS a PowerShell
  • Jak stáhnout soubor pomocí protokolu BITS pomocí PowerShell
  • Synchronní přenos souborů mezi počítači pomocí BITS
  • Použití BITS k asynchronnímu kopírování velkých souborů v síti
  • Kopírování celého obsahu síťové sdílené položky prostřednictvím služby BITS
  • Nahrávání souboru na HTTP server pomocí PowerShell a BITS

Protokol BITS

Bity nebo Pozadí Inteligentní Převod služby - (Background Intelligent Transfer Service) je služba Windows, která se používá k přenosu souborů mezi systémy. Pomocí protokolu BITS můžete přenášet soubory pro stahování i nahrávání. Podle tohoto protokolu počítače stahují soubory ze serverů při provádění automatické aktualizace systému Windows (včetně stahování aktualizací ze serveru WSUS), při přijímání programů z distribučních bodů SCCM atd..

Výhody protokolu BITS:

  • BITS je inteligentní protokol, který je během provozu schopen regulovat využívanou šířku pásma komunikačního kanálu tak, aby neovlivňoval jiné síťové aplikace a služby. Služba BITS může během provozu používat pouze nepřidělenou šířku pásma kanálu a dynamicky měnit rychlost přenosu dat (pokud jiné aplikace zvýší zatížení sítě, BITS může snížit rychlost přenosu dat přes síť);
  • Stažení souboru může jít na pozadí, neviditelně pro uživatele;
  • Úloha BITS v režimu obnovení bude automaticky pokračovat, i když dojde k přerušení komunikačního kanálu mezi počítačem a klientem nebo po restartování počítače;
  • Stahování prostřednictvím služby BITS můžete kdykoli pozastavit nebo obnovit bez ztráty dat;Poznámka:. Možnost restartování postupu kopírování souborů přes síť je k dispozici také v nástroji robocopy.exe, který umožňuje pokračovat v stahování souboru v případě selhání připojení..
  • BITS vám umožňuje spravovat priority spouštěcích úloh;
  • Přenos souborů mezi počítači probíhá na portech 80 (HTTP) nebo 443 (HTTPS), takže na firewallech nemusíte otevírat další porty. Například 445 portů, které se kopírují při použití protokolu SMB (nezapomeňte, že ve starších verzích protokolu SMB 1.0 je mnoho zranitelných míst);
  • Na straně příjemce a serveru není nasazený server IIS vyžadován.

BITS je tedy optimální protokol pro přenos velkých souborů přes pomalé a nestabilní sítě (satelitní kanál, připojení GPRS atd.).

BITS: Požadavky na verzi OS a PowerShell

Protokol BITS byl poprvé představen v systému Windows XP pro správu úloh BITS, ve kterých bylo možné tento nástroj použít bitsadmin.exe. Nástroj je stále podporován, ale je zastaralý. Pro správu úloh BITS je vhodnější použít speciální rutiny PowerShell.

Pro práci v tomto scénáři potřebujeme operační systém, který není nižší než Windows Vista nebo Windows Server 2008, a PowerShell ne nižší než verze 2.0. Moderní verze Windows 10 a Windows Server 2016/2012 R2 plně podporují protokol BITS.

Tip. Je možné používat Windows Server 2003. V tomto případě budete muset nainstalovat speciální aktualizace KB 923845 a PowerShell V2.0..

Podpora BITS je vyžadována na straně klienta i serveru.

Jak stáhnout soubor pomocí protokolu BITS pomocí PowerShell

Předpokládejme, že chcete stáhnout velký soubor ISO uložený na serveru HTTP IIS (_http: //10.2.2.148/erd65_32.iso).

Předpokládá se, že k této URL je povolen anonymní přístup (v budoucnu budeme zvažovat přístup k URL s ověřením).

Nejprve nahrajte modul podpory BITS do relace PowerShell:

Import modulu BitsTransfer

Po načtení modulu můžete zobrazit seznam všech dostupných příkazů modulu BitsTransfer:

get-command * -BITS *

Jak vidíte, je k dispozici pouze 8 cmdlet:

  • Add-bitsfile
  • Kompletní přenos bitů
  • Get-BitsTransfer
  • Remove-BitsTransfer
  • Obnovit-BitsTransfer
  • Set-BitsTransfer
  • Start-BitsTransfer
  • Přepnout-BitsTransfer

Synchronní přenos souborů mezi počítači pomocí BITS

Rutina Start-BitsTransfer vám umožňuje stahovat soubory přes HTTP (stejně jako cmdlet Invoke-WebRequest) a ze sdílených síťových složek (přes SMB). Chcete-li stáhnout soubor ze zadané adresy URL pomocí protokolu BITS a uložit jej do místního adresáře C: \ Temp, použijte příkaz:

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

Zpráva Jedná se o přenos souborů, který používá službu inteligentního přenosu na pozadí (BITS). říká, že bylo zahájeno stahování zadaného souboru protokolem BITS.

V tomto příkladu rutina stáhne soubor synchronně. Stahování souboru připomíná obvyklý postup kopírování pomocí Průzkumníka nebo pomocí položky PoSh cmdlet Copy-Item. V takovém případě se na obrazovce zobrazí ukazatel průběhu zobrazující stav stahování. Po restartování počítače nebude stahování obnoveno (budete muset znovu stáhnout celý soubor).

Použití BITS k asynchronnímu kopírování velkých souborů v síti

Proces stahování souborů přes BITS lze také spustit v asynchronním režimu, proto je třeba do výše uvedeného příkazu přidat parametr -asynchronní. V tomto režimu, pokud se během stahování souboru něco stane (restartování serveru, klienta, odpojení komunikačního kanálu atd.), Bude úloha automaticky pokračovat po obnovení dostupnosti zdroje a stahování souboru bude pokračovat od okamžiku přerušení připojení..

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

Je důležité. Ve výchozím nastavení Start-BitsTransfer pracuje s prioritou popředí (nejvyšší možná). Předpokládá se, že stažení souboru spuštěného v tomto režimu bude konkurovat jiným procesům pro šířku pásma kanálu. Chcete-li tomu zabránit, musíte jako argument k příkazu například explicitně zadat jakoukoli jinou prioritu, -Priorita nízká:

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

Na pozadí běží asynchronní úloha BITS a proces provádění příkazu pro upload souboru není zobrazen. Stav úlohy BITS lze získat z konzoly PowerShell pomocí příkazu Get-BitsTransfer:

Get-BitsTransfer | fl

Příkaz vrací stav přenosu (v tomto případě je jasné, že přenos je dokončen - přenesen), informace o počtu přenesených bytů, celkové velikosti souboru, době vytvoření a dokončení úlohy BITS.

Můžete zobrazit stav všech úloh BITS spuštěných v počítači v podobě tabulky:

Get-BitsTransfer | vyberte DisplayName, BytesTotal, BytesTransferred, JobState | Tabulka formátu -AutoSize

Při použití režimu asynchronního přenosu je v cílovém adresáři vytvořen dočasný soubor s příponou TMP (ve výchozím nastavení skrytý v průzkumníku). Chcete-li jej převést na původní typ souboru (který je uložen na zdrojovém serveru), musíte spustit příkaz Complete-BitsTransfer:

Get-BitsTransfer | Kompletní přenos bitů

Úloha stahování BITS se poté považuje za dokončenou a zmizí ze seznamu úkolů..

Můžete nahrát místní soubor do sdílené síťové složky na vzdáleném serveru. Chcete-li to provést, použijte následující příkaz (pro zjednodušení můžete zadat název úlohy kopírování):

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

Chcete-li dočasně pozastavit úlohu BITS, proveďte následující kroky:

Get-BitsTransfer - jméno CopyISOtoEKT | Přepnout-BitsTransfer

Chcete-li pokračovat v práci, použijte rutinu Resume-BitsTransfer:

Get-BitsTransfer - jméno CopyISOtoEKT | Resume-BitsTransfer -Asynchronous

Do úlohy BITS můžete přidat další soubory pomocí rutiny Add-BitsFile:

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

Chcete-li odstranit všechny úlohy stahování BITS v počítači (včetně těch, které spustili jiní uživatelé), spusťte příkaz:

Get-BitsTransfer -Allusers | Remove-BitsTransfer

Nemůžete zrušit úlohy BITS spuštěné ze systému (chyba 0x80070005 Nelze zrušit úlohu). Chcete-li tuto úlohu zrušit, musíte spustit příkaz Remove-BitsTransfer z části SYSTEM.

Pokud server, na kterém je soubor uložen, vyžaduje ověření uživatele, můžete vyvolat okno, ve kterém potřebujete přihlašovací údaje pro přístup ke zdroji:

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

Chcete-li usnadnit sledování výsledků úlohy BITS, můžete použít jednoduchý skript, který monitoruje úlohu a zobrazuje procentuální zatížení na obrazovce každých několik sekund. Na konci stahování souboru skript automaticky převede soubor 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') - nebo ($ job.JobState.ToString () -eq 'Connecting')))

Write-host $ Job.JobState.ToString ()
$ Pro = ($ job.BytesTransferred / $ job.BytesTotal) * 100
Write-Host $ Pro „%“
Spánek 3

Úloha Complete-BitsTransfer -BitsJob $

Kopírování celého obsahu síťové sdílené položky prostřednictvím služby BITS

Jak jsme již řekli, služba BITS nepotřebuje k práci webový server, to znamená, že můžete kopírovat soubory přímo z jiných počítačů se systémem Windows nebo ze sdílených síťových složek:

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

Program cmdlets modulu BitsTransfer nemůže rekurzivně kopírovat všechny soubory a složky z konkrétního adresáře nebo soubory, které používají jiné programy. Chcete-li zkopírovat všechny soubory s podadresáři ze zadané síťové složky, použijte tuto funkci (nejprve zkontrolujte, zda cílový adresář existuje a vytvořte jej):

Import modulu BitsTransfer
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
pokud (-Ne (testovací cesta $ cíl))

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

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

Spánek 3

Úloha Complete-BitsTransfer -BitsJob $
foreach ($ i ve složkách $)

$ existuje = Zkušební cesta $ Cíl \ $ i
if ($ existuje -eq $ false) New-Item $ Destination \ $ i -ItemType Directory
$ job = Start-BitsTransfer -Source $ Source \ $ i \ *. * -Destination $ Destination \ $ i -asynchronous -Priority low
while (($ job.JobState.ToString () -eq 'Transfering') - nebo ($ job.JobState.ToString () -eq 'Connecting')))

Spánek 3

Úloha Complete-BitsTransfer -BitsJob $


Nahrávání souboru na HTTP server pomocí PowerShell a BITS

Pomocí služby BITS můžete nejen stáhnout soubor ze serveru HTTP, ale také jej nahrát na vzdálený webový server. Chcete-li to provést, musí být na straně příjemce nainstalován webový server IIS s nainstalovanou součástí Bity Server Rozšíření. V nastavení virtuálního adresáře IIS v sekci Bity Nahrávání je třeba povolit možnost "Povolit klienti do nahrávání soubory".

Pokud používáte anonymní autorizaci, musíte povolit anonymním uživatelům zapisovat do adresáře na úrovni NTFS. Pokud je stahování souborů prováděno pod autorizovanými uživateli, musí jim být ve složce ke stažení udělena oprávnění RW.

Chcete-li soubor nahrát na HTTP server pomocí protokolu BITS, spusťte příkaz:

Start-bits -source c: \ iso \ win2016.iso -destination http://10.10.1.200/MEDVImages/win2016.iso -Transfertype Upload

Upozorňujeme, že ve výchozím nastavení vám služba IIS umožňuje nahrávat soubory až do 30 MB. Chcete-li povolit nahrávání velkých souborů, musíte změnit hodnotu parametru maxAllowContentLength v souboru web.config..

Použití funkcí BITS je tedy vynikající alternativou k tradičnímu kopírování souborů v síti pomocí protokolu SMB. Na rozdíl od posledně jmenovaných je kopírování souborů BITS prováděno i přes odpojení a restartování počítačů a nenačte komunikační kanál, aniž by zasahovalo do práce jiných síťových aplikací a uživatelů. Protokol BITS může být optimálním řešením pro přenos velkých obrazových souborů ISO a souborů virtuálních strojů (vmdk, vhdx) přes síť WAN.