Hoe je grote bestanden efficiënt kunt overzetten met PowerShell en BITS

Als je grote bestanden wilt verzenden of downloaden zonder je hele netwerk te overbelasten, is BITS (Background Intelligent Transfer Service) erg handig – en het is bovendien ingebouwd in Windows. Het is ontworpen om stil op de achtergrond te werken en grote bestanden soepel te verwerken, zelfs als je verbinding niet perfect is of als je overdrachten moet pauzeren en hervatten zonder opnieuw te hoeven beginnen. Het is eigenlijk vreemd dat mensen dit vaak over het hoofd zien, want het is behoorlijk betrouwbaar, vooral voor netwerkbeheerders of mensen die met grote mediabestanden of VM-bestanden werken. In deze handleiding leer je hoe je PowerShell kunt gebruiken om BITS-overdrachten te starten, te beheren en te bewaken. Het is misschien wat technisch, maar de moeite waard, want op sommige systemen is overdragen met BITS veel stabieler dan traditioneel kopiëren, met name via trage of instabiele verbindingen. Bovendien kun je veel van deze stappen automatiseren of in scripts opnemen als je dit regelmatig doet – handig om te weten.

Hoe PowerShell en BITS te gebruiken voor het overdragen van grote bestanden

Hoe bestanden te downloaden met de BitsTransfer-module van PowerShell

Dit is de basismanier: je gebruikt de BitsTransfer- module van PowerShell om een ​​bestand te downloaden. Het is vergelijkbaar met een gewone webdownload, maar dan beter omdat je de download kunt pauzeren, hervatten en de bandbreedte kunt beperken, afhankelijk van wat je nodig hebt. De opdracht `Start-BitsTransfer` is hierbij erg handig. Stel dat je bijvoorbeeld een ISO-bestand van een testserver wilt downloaden:

Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp

Met dit commando start de download en zie je een voortgangsbalk op het scherm. Houd er rekening mee dat dit een eenvoudige synchrone overdracht is. Als je verbinding halverwege de download wegvalt, moet je de hele procedure opnieuw starten, omdat hervatten niet mogelijk is. Een beetje vervelend, maar het is duidelijk. Op sommige systemen kunnen er problemen optreden als UAC of firewallinstellingen BITS blokkeren, dus controleer die instellingen als er niets lijkt te gebeuren.

Hoe schakel je asynchrone en hervatbare overdrachten in?

Als je internetverbinding instabiel is of als je enorme bestanden downloadt, is de asynchrone modus de beste optie. Hierdoor kan de download op de achtergrond doorgaan, en zelfs als je systeem opnieuw opstart of je netwerkverbinding wegvalt, zou deze de download moeten hervatten zodra alles weer werkt. Voeg hiervoor simpelweg -asynchronous toe.

Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp -asynchronous

Op deze manier blokkeert de overdracht niets anders, en als de verbinding wegvalt, probeert het de overdracht te hervatten waar het was gebleven. Dit is handig bij het overzetten van grote bestanden via onstabiele netwerken. Als je wilt dat BITS goed samenwerkt met ander netwerkverkeer, geef het dan een lagere prioriteit door -Priority low toe te voegen. Zo voorkomt het dat het alle bandbreedte in beslag neemt en je internetgebruik of werk verstoort.

Beheer en bewaking van BITS-taken

Zodra een overdracht is gestart, wilt u deze waarschijnlijk in de gaten houden. Om alle actieve BITS-taken te bekijken, voert u het volgende commando uit:

Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize

Dit geeft een snel overzicht van wat er wordt overgedragen, hoeveel er al is gedaan en de huidige status: of het verbinding maakt, wordt overgedragen of is voltooid. Vergeet niet om dit uit te voeren als de overdracht is voltooid, zodat alles netjes wordt afgerond:

Get-BitsTransfer | where {$_. JobState -eq 'Transferred'} | Complete-BitsTransfer

Met dit commando wordt de overdracht voltooid, wordt het tijdelijke bestand (.TMP) teruggehernoemd naar de oorspronkelijke bestandsnaam en worden alle bestanden opgeruimd. Anders blijven er mogelijk onafgemaakte bestanden achter, wat onhandig aanvoelt.

Als u bestanden naar netwerkshares of externe pc’s wilt kopiëren, hoeft u alleen het UNC-pad op te geven, bijvoorbeeld:

Start-BitsTransfer -Source C:\iso\win2022.iso -Destination \\man-srv01\c$\iso -Asynchronous -DisplayName CopyISOtoMan

En als er iets vastloopt of als je een overdracht wilt pauzeren, gebruik dan:

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

Om later verder te gaan, voer het volgende commando uit:

Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -Asynchronous

PowerShell ondersteunt zelfs het doorgeven van inloggegevens als u zich wilt authenticeren op een externe server met:

Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential (Get-Credential)

Tot slot, als je de voortgang nauwlettend in de gaten houdt, kan een klein scriptje het overdrachtspercentage live weergeven, wat best handig is:

Import-Module BitsTransfer $bitsjob = Start-BitsTransfer -Source http://10.1.1.18/erd65_32.iso -Destination c:\temp -Asynchronous while (($bitsjob. JobState. ToString() -eq 'Transferring') -or ($bitsjob. JobState. ToString() -eq 'Connecting')) { Write-Host $bitsjob. JobState. ToString() $Proc = ($bitsjob. BytesTransferred / $bitsjob. BytesTotal) * 100 Write-Host "$Proc %" Start-Sleep -Seconds 3 } Complete-BitsTransfer -BitsJob $bitsjob

Het is niet super elegant, maar het werkt prima als je die continue status wilt behouden. Houd er rekening mee dat BITS wordt gebruikt voor Windows Update en veel netwerkprocessen op de achtergrond, dus het is net zo betrouwbaar als de eigen mechanismen van Windows. Dit betekent dat het probeert andere netwerkactiviteiten niet te verstoren, waardoor het perfect is voor grote of meerdere downloads via WAN’s.