Powershell Download evtl. mit Ladebalken

sniper8952

Banned
Registriert
Juni 2008
Beiträge
355
Hallo Zusammen

Wie kann ich bewerkstelligen , dass wenn ich eine Datei Herunterlade Powershell erkennt, wenn der Download fertig ist? Ich möchte das Windows ISO herunterladen (aktuell andere Testdatei), dies kann jedoch eine weile dauern. Wie erkenne ich wie weit der Fortschritt der herunter zu ladende Datei ist?

Nach dem Download wird Powershell leider auch nicht mehr beendet und ich weiss nicht wie das beenden kann nach dem download.
z.B:

$client = new-object System.Net.WebClient
$client.DownloadFile("http://dl.cdn.chip.de/downloads/607...484-607c5d-B-ec02807d271f138c9704177c73f07da6", "C:\Virtual_Maschine\flash.exe")
 
Da bist Du glaub ich mit (nativem) PowerShell eher schlecht beraten. PS kann zwar Fortschrittsbalken anzeigen (per Write-Progress) aber nur in seinem eigenen Fenster.

Da Du das hier so schreibst, geh ich mal davon aus, daß ein "normaler" Downloadmanager frei nach freedownloadmanager keine Option ist?

Was Du machen könntest, wäre, ein kleines C#-Projekt aufzumachen. Den Code, den Du oben hast, kannst Du einfach als C#-Code umschreiben:

C#:
using System.Net;
// ...
WebClient client = new WebClient();
client.DownloadFile(....);
/ ...

Dann müßtest Du zusätzlich:
  • Windows Forms oder (moderner) WPF referenzieren
  • den Download asynchron gestalten
  • aus dem laufenden Download den Fortschritt davon ermitteln
  • ein ProgressBar-Control anlegen (und irgendwo im Fenster positionieren) und schließlich
  • den Wert von PercentComplete des ProgressBar-Controls mit dem Fortschritt des Downloads synchronisieren.

Nachschauen müßtest Du also insbesondere, was:
  • WebClient für Parallelität zur Verfügung stellt, bzw ob Du mit System.Threading nachhelfen mußt;
  • wie Du die Finger an den Fortschritt des Downloads bekommst. Ich meine mich zu erinnern, daß man mit BytesDownloaded und BytesTotal arbeiten konnte... aber keine Gewähr.


Dieselbe Herangehensweise funktioniert aus PowerShell heraus auch, ist aber aufwendiger und Du hast wieder das Problem mit dem abschließenden Beenden.

PowerShell selber kennt übrigens den Befehl Invoke-WebRequest mit -OutFile. Eventuell kannst Du damit auch was anfangen.
 
Zurück
Oben