Másoljon nagy fájlokat a hálózaton keresztül a BITS és a PowerShell használatával

A helyi (és globális) hálózatokon a fájlok rendszerük közötti átvitele általában az SMB, FTP vagy HTTP protokollokkal történik. Mindezen protokollok problémája a nagy fájlok letöltésének nehézsége, amelyeket tovább súlyosbíthatnak az adatok lassú vagy instabil csatornán keresztüli továbbítása. Fájlok másolásakor ezekkel a protokollokkal általában a kiszolgáló és a címzett közötti kommunikációs csatorna összes elérhető sávszélességét használják, ami hátrányosan befolyásolhatja a hálózati teljesítményt és más alkalmazásokat (a hálózati berendezés szintjén nem mindig lehet a megfelelő QoS-házirendeket konfigurálni). Ebben a cikkben megvizsgáljuk a protokoll használatának lehetőségét. BITS és parancsmagok PowerShell nagy fájlok másolása a hálózaton keresztül instabil vagy lassú csatornán keresztül.

Tartalom:

  • BITS Protokoll
  • BITS: OS és PowerShell verziókövetelmények
  • Fájl letöltése a BITS protokoll használatával a PowerShell használatával
  • Fájlok szinkron átvitele a számítógépek között a BITS segítségével
  • A BITS használata a nagy fájlok aszinkron másolására egy hálózaton keresztül
  • A hálózati megosztás teljes tartalmának másolása a BITS segítségével
  • Fájl feltöltése egy HTTP szerverre a PowerShell és a BITS használatával

BITS Protokoll

BITS vagy háttér intelligens átutalás szolgáltatás - (Háttér intelligens átviteli szolgáltatás) egy Windows szolgáltatás, amelyet fájlok átvitele a rendszerek között. A BITS protokoll segítségével fájlokat tölthet le és töltsön fel. E protokoll szerint a számítógépek letöltik a fájlokat a kiszolgálókról, amikor automatikusan frissítik a Windowsot (ideértve a frissítések letöltését egy WSUS szerverről), amikor programokat fogadnak az SCCM terjesztési pontoktól stb..

A BITS Jegyzőkönyv előnyei:

  • A BITS egy intelligens protokoll, amely működés közben képes szabályozni a kommunikációs csatorna használt sávszélességét, hogy ne befolyásolja a többi hálózati alkalmazást és szolgáltatást. A BITS csak nem kiosztott csatorna sávszélességet használhat, és működés közben dinamikusan megváltoztathatja az adatátviteli sebességet (ha más alkalmazások növelik a hálózat terhelését, a BITS csökkentheti az adatátviteli sebességet a hálózaton keresztül);
  • A fájlok letöltése a felhasználó számára láthatatlanul a háttérben történhet;
  • A BITS folytatása üzemmódban a BITS feladat automatikusan folytatódik, még akkor is, ha a számítógép és az ügyfél közötti kommunikációs csatorna megszakad, vagy a számítógép újraindul;
  • Bármikor szüneteltetheti vagy folytathatja a letöltést a BITS-en keresztül adatvesztés nélkül;jegyzet. A fájlmásolási eljárás hálózaton keresztüli újraindításának lehetősége a robocopy.exe segédprogramban is elérhető, amely lehetővé teszi a fájl letöltésének folytatását csatlakozási hiba esetén.
  • A BITS lehetővé teszi a rendszerindítási feladat prioritásainak kezelését;
  • A fájlok átvitele a számítógépek között a 80-as (HTTP) vagy a 443-as (HTTPS) porton történik, így nem kell további portokat megnyitnia a tűzfalakon. Például: 445 port, amelyet az SMB protokoll használatakor másolnak (ne felejtsük el, hogy sok biztonsági rés van az SMB 1.0 protokoll régebbi verzióiban);
  • A címzett és a szerver oldalán nincs szükség telepített IIS szerverre.

Így a BITS az optimális protokoll nagy fájlok továbbítására lassú és instabil hálózatokon (műholdas csatorna, GPRS kapcsolat stb.).

BITS: OS és PowerShell verziókövetelmények

A BITS protokollt először a Windows XP-ben vezették be annak a BITS-feladatnak a kezelésére, amelyben lehetséges volt a segédprogram bitsadmin.exe. A segédprogram továbbra is támogatott, de elavult. A BITS feladatok kezelése érdekében célszerű speciális PowerShell-parancsmagokat használni.

A forgatókönyv működéséhez szükség van egy operációs rendszerre, amely nem alacsonyabb, mint a Windows Vista vagy a Windows Server 2008, és a PowerShell, nem alacsonyabb, mint a 2.0. A Windows 10 és a Windows Server 2016/2012 R2 modern verziói teljes mértékben támogatják a BITS protokollt.

tanács. Lehetséges a Windows Server 2003 használata. Ebben az esetben a KB 923845 és a PowerShell V2.0 speciális frissítéseket kell telepítenie..

A BITS támogatására mind az ügyfél, mind a szerver oldalán szükség van.

Fájl letöltése a BITS protokoll használatával a PowerShell használatával

Tegyük fel, hogy nagy IIS HTTP-kiszolgálón tárolt ISO fájlt szeretne letölteni (_http: //10.2.2.148/erd65_32.iso).

Feltételezzük, hogy névtelen hozzáférés engedélyezett ehhez az URL-hez (a jövőben megfontoljuk az URL-hez való hozzáférést hitelesítéssel).

Először töltse be a BITS támogatási modult a PowerShell munkamenetbe:

Import-Modul BitsTransfer

A modul betöltése után felsorolhatja a BitsTransfer modul összes elérhető parancsát:

get-command * -BITS *

Mint láthatja, csak 8 cmdlet érhető el:

  • Add-BitsFile
  • Komplett-BitsTransfer
  • Get-BitsTransfer
  • Remove-BitsTransfer
  • Folytatás-BitsTransfer
  • Set-BitsTransfer
  • Üzembe BitsTransfer
  • Felfüggesztés BitsTransfer

Fájlok szinkron átvitele a számítógépek között a BITS segítségével

A Start-BitsTransfer parancsmag lehetővé teszi a fájlok letöltését HTTP (k) (valamint az Invoke-WebRequest parancsmag) és megosztott hálózati mappákból (SMB-n keresztül). Egy fájl letöltésére egy megadott URL-címről a BITS protokoll használatával, és a helyi C: \ Temp könyvtárba mentéséhez használja a következő parancsot:

Start-BitsTransfer -forrás _http: //10.2.2.148/erd65_32.iso -célpont c: \ temp

üzenet Ez egy fájlátvitel, amely a Background Intelligent Transfer szolgáltatást (BITS) használja. szerint a megadott fájl letöltése a BITS protokolllal megkezdődött.

Ebben a példában a parancsmag szinkronban tölti le a fájlt. A fájl letöltése hasonlít a szokásos másolási eljáráshoz az Intézőn keresztül vagy a PoSh parancsmag másolási elemének használatával. Ebben az esetben a folyamatjelző sáv jelenik meg a képernyőn, feltüntetve a letöltés állapotát. A számítógép újraindításakor a letöltés nem folytatódik (a teljes fájlt újra kell töltenie).

A BITS használata a nagy fájlok aszinkron másolására egy hálózaton keresztül

A fájlok BITS-n keresztüli letöltésének folyamata aszinkron módban is elindítható, ehhez hozzá kell adnia a paramétert a fenti parancshoz. -aszinkron. Ebben a módban, ha történik valami a fájl letöltése közben (a szerver, az ügyfél újraindítása, a kommunikációs csatorna leválasztása stb.), Akkor a feladat automatikusan folytatódik a forrás rendelkezésre állásának helyreállítása után, és a fájl letöltése a kapcsolat megszakításának pillanatától folytatódik..

Start-BitsTransfer -forrás _http: //10.2.2.148/erd65_32.iso -célpont c: \ temp -asynchronous

Fontos. Alapértelmezés szerint a Start-BitsTransfer az előtér prioritással működik (a lehető legmagasabb). Feltételezzük, hogy az ebben a módban elindított fájl letöltése a többi csatorna sávszélessége miatt versenytársa lesz. Ennek elkerülése érdekében kifejezetten meg kell határoznia minden egyéb prioritást, például a parancs argumentumaként, -prioritás alacsony:

Start-BitsTransfer -forrás _http: //10.2.2.148/erd65_32.iso -célpont c: \ temp -szinkron -Prioritás alacsony

Egy aszinkron BITS-feladat fut a háttérben, és a fájlfeltöltési parancs végrehajtásának folyamata nem jelenik meg. A BITS feladat állapotát a PowerShell konzolból szerezheti be a Get-BitsTransfer paranccsal:

Get-BitsTransfer | fl

A parancs visszaadja az átvitel állapotát (ebben az esetben egyértelmű, hogy az átadás befejeződött - átadva), az átvitt byte-ok számával, a fájl teljes méretével, a BITS létrehozási és befejezési idejével kapcsolatos információk.

A számítógépen futó összes BITS job állapotát táblázatos formában tekintheti meg:

Get-BitsTransfer | válassza a DisplayName, BytesTotal, BytesTransferred, JobState | lehetőséget Táblázat formátum - Automatikus méret

Aszinkron átviteli mód használatakor egy ideiglenes fájlt hoz létre a TMP kiterjesztéssel a célkönyvtárba (alapértelmezés szerint el van rejtve az Explorerben). Az eredeti fájltípusba konvertálásához (amelyet a forráskiszolgálón tárolnak) futtatnia kell a Complete-BitsTransfer parancsot:

Get-BitsTransfer | Komplett-BitsTransfer

A BITS letöltési feladata ezt követően teljesítettnek tekinthető, és eltűnik a feladatlistáról..

Feltölthet egy helyi fájlt egy távoli kiszolgáló megosztott hálózati mappájába. Ehhez használja a következő parancsot (a kényelem érdekében megadhatja a másolási munka nevét):

Start-BitsTransfer -C forrás: \ iso \ w101809.iso -Destination \\ ekt-fs1 \ iso -Asynchronous -DisplayName CopyISOtoEKT

A BITS-feladat ideiglenes felfüggesztése:

Get-BitsTransfer -Name CopyISOtoEKT | Felfüggesztés BitsTransfer

A munka folytatásához használja a Resume-BitsTransfer parancsmagot:

Get-BitsTransfer -Name CopyISOtoEKT | Folytatás-BitsTransfer - Szinkron

További fájlokat adhat hozzá a BITS feladathoz az Add-BitsFile parancsmag segítségével:

Get-BitsTransfer -Name CopyISOtoEKT | Add-BitsFile -C forrás: \ iso \ w10msu \ * -Desination \\ ekt-fs1 \ iso -Asynchronous

Az összes BITS letöltési job törléséhez a számítógépen (beleértve a többi felhasználó által elindított munkákat is) futtassa a következő parancsot:

Get-BitsTransfer -Allusers | Remove-BitsTransfer

A Rendszer alatt indított BITS-feladatokat nem lehet visszavonni (0x80070005 hiba nem sikerült a feladat törlésekor). A feladat törléséhez el kell futtatnia az Remove-BitsTransfer parancsot a Rendszer alól.

Ha a szerver, amelyen a fájlt tárolja, felhasználói hitelesítést igényel, akkor felhívhat egy ablakot, amelyben hitelesítő adatokra van szükség az erőforrás eléréséhez:

Start-BitsTransfer -forrás _http: //10.2.2.148/erd65_32.iso -célpont c: \ temp -asynchronous -Priority alacsony --Hitelesítés NTLM -Credential Get-Credential

A BITS feladat eredményeinek nyomon követésének megkönnyítése érdekében használhat egy egyszerű szkriptet, amely figyeli a feladatot, és néhány másodpercenként megjeleníti a képernyőn a betöltés százalékos arányát. A fájl letöltése után a szkript automatikusan konvertálja a TMP fájlt az eredeti formátumba:

Import-Modul BitsTransfer
$ job = Start-BitsTransfer -forrás _http: //10.2.2.148/erd65_32.iso -Nem célpontja: \ temp -Asynchronous
míg (($ job.JobState.ToString () -eq 'Transfering') -vagy ($ job.JobState.ToString () -eq 'Connecting'))

Írás-host $ Job.JobState.ToString ()
$ Pro = ($ job.BytesTransferred / $ job.BytesTotal) * 100
Write-Host $ Pro “%”
3. alvás

Complete-BitsTransfer -BitsJob $ job

A hálózati megosztás teljes tartalmának másolása a BITS segítségével

Mint már említettük, a BITS működéséhez nincs szükség webszerverre, ez azt jelenti, hogy fájlokat másolhat közvetlenül más Windows számítógépekről vagy megosztott hálózati mappákból:

Start-BitsTransfer -forrás \\ msk-rep01 \ os \ rhel-szerver-7.0-x86_64-dvd.iso - Cél cél: \ temp -Aszinkron

A BitsTransfer modul parancsmagjai nem tudnak rekurzív módon másolni az összes fájlt és mappát egy adott könyvtárból, vagy más programok által használt fájlokat. Az alkönyvtárakkal rendelkező összes fájl másolásához a megadott hálózati mappából használja ezt a funkciót (először ellenőrizheti, hogy létezik-e a célkönyvtár, és létrehozhatja azt):

Import-Modul BitsTransfer
$ Source = "\\ msk-rep01 \ os \"
$ Destination = "c: \ tmp \"
if (-Nem (Test-Path $ Destination))

$ null = Új elem -Path $ Destination -ItemType könyvtár

$ mappák = Get-ChildItem -Név -Path $ forrás -Directory -Fizetés
$ job = Start-BitsTransfer -Source $ Source \ *. * -Destination $ Cél -asynchronous -Priority alacsony
míg (($ job.JobState.ToString () -eq 'Transfering') -vagy ($ job.JobState.ToString () -eq 'Connecting'))

3. alvás

Complete-BitsTransfer -BitsJob $ job
foreach ($ i $ mappákban)

$ létezik = Test-Path $ Cél \ $ i
if ($ létezik -eq $ false) Új elem $ rendeltetési hely \ $ i -ItemType könyvtár
$ job = Start-BitsTransfer -Source $ Source \ $ i \ *. * -Destination $ Cél \ $ i -asynchronous -Priority alacsony
míg (($ job.JobState.ToString () -eq 'Transfering') -vagy ($ job.JobState.ToString () -eq 'Connecting'))

3. alvás

Complete-BitsTransfer -BitsJob $ job


Fájl feltöltése egy HTTP szerverre a PowerShell és a BITS használatával

A BITS használatával nem csak letölthet egy fájlt egy HTTP szerverről, hanem feltöltheti azt egy távoli webszerverre is. Ehhez az IIS webszervert és a telepített összetevőt telepíteni kell a címzett oldalára bit szerver kiterjesztés. Az IIS virtuális könyvtári beállításai szakaszban bit feltöltések engedélyeznie kell az opciót "Hagyjuk ügyfelek hogy feltöltések fájlok".

Ha névtelen jogosultságot használ, akkor engedélyeznie kell a névtelen felhasználók számára, hogy az NTFS szintű könyvtárba írjanak. Ha a fájl letöltése engedélyezett felhasználók által történik, akkor a letöltési mappában RW engedélyeket kell kapniuk.

A fájl feltöltéséhez a BITS-protokoll használatával a HTTP-kiszolgálóra futtassa a következő parancsot:

Start-bit -forrás c: \ iso \ win2016.iso-rendeltetés http://10.10.1.200/MEDVImages/win2016.iso -Transfertype Upload

Felhívjuk figyelmét, hogy alapértelmezés szerint az IIS lehetővé teszi a fájlok feltöltését 30 MB-ig. A nagy fájlok feltöltésének engedélyezéséhez meg kell változtatnia a web.config fájl maxAllowContentLength paraméterének értékét..

Így a BITS szolgáltatások használata kiváló alternatívája a hagyományos fájlmásolásnak az egész hálózaton keresztül az SMB protokoll használatával. Az utóbbival ellentétben a BITS fájlok másolásának feladata a számítógépek leválasztása és újraindítása ellenére történik, és nem tölti be a kommunikációs csatornát anélkül, hogy beavatkozna más hálózati alkalmazások és felhasználók munkájába. A BITS protokoll lehet az optimális megoldás nagy ISO képfájlok és virtuális gép fájlok (vmdk, vhdx) WAN hálózaton történő átviteléhez..