Wie man große Dateien effizient mit PowerShell und BITS überträgt

Wenn Sie große Dateien senden oder herunterladen möchten, ohne Ihr gesamtes Netzwerk zu überlasten, ist BITS (Background Intelligent Transfer Service) äußerst praktisch – und zudem in Windows integriert. Der Dienst arbeitet unauffällig im Hintergrund und verarbeitet große Dateien reibungslos, selbst bei instabiler Verbindung oder wenn Sie Übertragungen pausieren und fortsetzen müssen, ohne von vorne beginnen zu müssen. Es ist erstaunlich, wie oft dieser Dienst übersehen wird, da er sehr zuverlässig ist, insbesondere für Netzwerkadministratoren oder Anwender, die mit großen Mediendateien oder VM-Dateien arbeiten. In dieser Anleitung erfahren Sie, wie Sie BITS-Übertragungen mit PowerShell starten, verwalten und überwachen. Das mag etwas technisch klingen, lohnt sich aber, da die Übertragung mit BITS in manchen Konfigurationen deutlich stabiler ist als das herkömmliche Kopieren, insbesondere bei langsamen oder instabilen Verbindungen. Viele dieser Schritte lassen sich zudem in Automatisierungen oder Skripte integrieren, falls Sie dies regelmäßig tun – gut zu wissen also.

Wie man PowerShell und BITS für die Übertragung großer Dateien verwendet

So laden Sie Dateien mit dem BitsTransfer-Modul von PowerShell herunter

Dies ist die grundlegende Methode: Sie verwenden das PowerShell- Modul BitsTransfer, um einen Dateidownload zu starten. Es ähnelt einem normalen Web-Download, bietet aber Vorteile, da es den Download je nach Bedarf pausieren, fortsetzen und die Bandbreite drosseln kann. Der Befehl `Start-BitsTransfer` ist hierbei hilfreich. Angenommen, Sie möchten beispielsweise eine ISO-Datei von einem Testserver herunterladen:

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

Dieser Befehl startet den Download. Auf dem Bildschirm wird ein Fortschrittsbalken angezeigt. Wichtig: Es handelt sich um eine einfache synchrone Übertragung. Sollte Ihre Verbindung während des Downloads abbrechen, müssen Sie den gesamten Vorgang neu starten, da eine Fortsetzung nicht möglich ist. Etwas ärgerlich, aber unkompliziert. Auf manchen Systemen können Probleme auftreten, wenn die Benutzerkontensteuerung (UAC) oder die Firewall-Einstellungen BITS blockieren.Überprüfen Sie diese daher, falls scheinbar nichts passiert.

So aktivieren Sie asynchrone und wiederaufnehmbare Übertragungen

Bei instabiler Internetverbindung oder beim Herunterladen sehr großer Dateien empfiehlt sich der asynchrone Modus. Dadurch läuft der Download im Hintergrund weiter und wird auch nach einem Systemneustart oder einer Netzwerkunterbrechung fortgesetzt, sobald die Verbindung wiederhergestellt ist. Fügen Sie einfach `-asynchronous :` hinzu.

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

So blockiert die Übertragung keine anderen Prozesse, und bei Verbindungsabbruch wird sie an der unterbrochenen Stelle fortgesetzt. Das ist besonders sinnvoll beim Übertragen großer Dateien über instabile Netzwerke. Damit BITS reibungslos mit anderem Netzwerkverkehr zusammenarbeitet, weisen Sie ihm mit dem Parameter ` -Priority low` eine niedrigere Priorität zu. So belegt BITS nicht die gesamte Bandbreite und beeinträchtigt weder Ihr Surfen noch Ihre Arbeit.

Verwaltung und Überwachung von BITS-Jobs

Sobald eine Übertragung läuft, sollten Sie sie im Auge behalten. Um alle aktiven BITS-Aufträge anzuzeigen, führen Sie folgenden Befehl aus:

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

Dies bietet einen schnellen Überblick darüber, was übertragen wird, wie viel bereits übertragen wurde und welchen Status die Übertragung aktuell hat – ob sie gerade verbunden wird, noch läuft oder bereits abgeschlossen ist. Nach Abschluss einer Übertragung nicht vergessen: Führen Sie diesen Befehl aus, um den Vorgang ordnungsgemäß abzuschließen.

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

Dieser Befehl schließt die Übertragung ab, benennt die temporäre Datei (.TMP) wieder in Ihren ursprünglichen Dateinamen um und räumt auf. Andernfalls könnten unfertige Dateien herumliegen, was einfach unpraktisch ist.

Wenn Sie Dateien auf Netzwerkfreigaben oder entfernte PCs kopieren müssen, geben Sie einfach den UNC-Pfad an, zum Beispiel:

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

Und falls es zu Problemen kommt oder Sie eine Übertragung pausieren möchten, verwenden Sie Folgendes:

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

Um später fortzufahren, führen Sie Folgendes aus:

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

PowerShell unterstützt sogar die Übergabe von Anmeldeinformationen, falls Sie sich auf einem Remoteserver authentifizieren müssen mit:

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

Und schließlich, falls Sie den Fortschritt obsessiv verfolgen möchten, kann ein kleines Skript den Übertragungsprozentsatz live anzeigen, was durchaus praktisch ist:

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

Es ist zwar nicht die eleganteste Lösung, aber sie erfüllt ihren Zweck, wenn Sie den Status fortlaufend abrufen möchten. Wichtig: BITS wird für Windows Update und viele Netzwerkprozesse im Hintergrund verwendet und ist daher genauso zuverlässig wie die Windows-eigenen Mechanismen. Das bedeutet, dass es versucht, andere Netzwerkaktivitäten nicht zu beeinträchtigen, wodurch es sich ideal für große oder mehrere gleichzeitige Downloads über WANs eignet.