Datei herunterladen mit PowerShell
Um eine Datei oder mehrere Dateien von einer Internetseite bzw. Webserver herunterladen zu können, kann man den Hintergrundübertragungsdienst BITS verwenden. Um solch eine Datei herunterladen zu können, benötigen wir ein kleines PowerShell Script. Außerdem kann aber auch das CmdLet Invoke-WebRequest verwendet werden.
Was ist BITS ?
Der Background Intelligent Transfer Service ist eine Dienst in den neueren Versionen von Microsoft Windows zur Übermittlung von Daten über das HTTP Protokoll im Hintergrund. Für diesen Transfer von Daten achtet BITS auf ungenutzte Netzwerkressourcen, so dass Dinge wie Streaming, andere Downloads und das Surfen im Internet nicht beeinträchtigt werden.
Datei herunterladen mit PowerShell und BITS
So jetzt zum eigentlichen Thema. Um nun einen Datei Download mit PowerShell zu starten, benötigen wir einen PowerShell – Einzeiler. Ist im Endeffekt selbsterklärend 🙂
Start-BitsTransfer -Source http://yourserver.com/yourfile.exe -Destination C:\Downloads\yourfile.exe
-Source
…gibt natürlich die Quelldatei an, die heruntergeladen werden soll
-Destination
…gibt den Speicherort für den Download an, wo die Datei gespeichert werden soll
Datei download starten mit Invoke-WebRequest
Außerdem hat man noch die Möglichkeit mit dem PowerShell CmdLet Invoke-Webrequest
einen Datei-Download zu starten. Das Resultat ist das gleiche, wobei bei großen Dateien BITS verwendet werden sollte, da dieser schneller ist. Das wurde an Hand von Zeit-Messungen heraus gefunden.
$url = "http://your.server/share/file.test" $output = "$PSScriptRoot\file.test" $starttime = Get-Date Invoke-WebRequest -Uri $url -OutFile $output Write-Output "$((Get-Date).Subtract($starttime).Seconds) second(s)"
In der letzten Zeile wird die bereits verstrichene Zeit angegeben, das ist aber lediglich ein Schönheitsfehler.