Große Dateien kopieren mit BITS und Powershell

Für das Kopieren von (großen) Dateien hat die PowerShell (zwangsläufig) einiges zu bieten. Neben dem etwas schlichten Copy-Item-Cmdlet (das z.B. keine Anmeldung an eine Freigabe ermöglicht) stehen die Windows-Befehle XCopy und der inoffizielle Nachfolger RoboCopy (für „Robust Copy“) zur Auswahl. Beide werden exakt auf dieselbe Art und Weise aufgerufen, wie innerhalb der "regulären" Befehlszeile.

Eine weitere Alternative ist der BITS-Dienst (Background Intelligent Transfer Service), der im Folgenden kurz vorgestellt wird. BITS ist ein Dienst, der bei Windows schon lange dabei ist, und der unter anderem das Arbeitspferd des Windows-Updates ist. Wer weiß, wie Windows seine Updates abwickelt, kennt auch bereits zwei Grundeigenschaften von BITS: Zuverlässig und unauffällig (hartnäckig wäre eine weitere Eigenschaft). Der BITS-Dienst bietet für Anwendungen eine COM-Schnittstelle, die von einer Reihe von PowerShell-Cmdlets gekapselt wird, die Teil des BitsTransfer-Moduls sind, das mit der PowerShell 2.0 installiert wird und damit immer zur Verfügung steht.

Modul für BITS laden

Ein Import-Module Bitstransfer lädt das Modul, ein Get-Command –Module BitsTransfer listet alle Cmdlets aus dem Modul auf. Im Mittelpunkt steht das Start-BitsTransfer-Cmdlet, das, wie der Name es vermuten lässt, einen Transfer startet.

Im einfachsten Fall werden wie bei XCopy&Co lediglich die Quell- und die Zieldatei angegeben:

Import-Module BitsTransfer

$QuellVerzeichnis = "C:\ISOS\*.iso"
$ZielVerzeichnis = "Z:\ISOBackup"

Start-BitsTransfer -Source $QuellVerzeichnis `
 -Description "ISO-Transfer" `
 -Destination $ZielVerzeichnis `
 -DisplayName "ISO-Transfer" 

Soll der Transfer als Job im Hintergrund ausgeführt werden, erledigt das der Parameter Asynchron.

Ein solcher Transfer muss über das Complete-BitsTransfer-Cmdlet abgeschlossen werden:

Get-BitsTransfer | Where-Object { $_.DisplayName -eq "ISO-Transfer" } | Complete-BitsTransfer

Die BITS-Cmdlets eignen sich vor allem für das Kopieren großer Images. Ein weiteres Merkmal ist der Umstand, dass ein Kopierauftrag fortgesetzt wird nachdem der Rechner herunter- und danach neu gestartet wurde (wer das überprüfen möchte, sollte es einfach einmal ausprobieren).

1 Kommentar

Bild von Peter Monadjemi

PSDiableModuleAutoLoading kommt erst mit PowerShell 3. Die Idee ist, dass die Metadaten aller verfügbaren Module per Default geladen werden (aber nur die Metadaten, nicht die Module), so dass sich die Namen von noch nicht geladenen Cmdlets trotzdem abfragen lassen. Über PSDiableModuleAutoLoading kann dieses Verhalten deaktiviert werden.

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht angezeigt. Wenn mit Ihrer angegebenen Mail-Adresse ein Gravatar verknüpft ist, dann wird dieser neben Ihrem Kommentar eingeblendet.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.
  • Mail-Adressen werden im Seitenquelltext unkenntlich gemacht, um sie vor dem automatischen Erfassen durch Spammer zu schützen.

Weitere Informationen über Formatierungsoptionen