Ein PowerShell -Modul zum Herunterladen von Dateien.
Erfordert Sie auf Invoke-WebRequest erforderlich, dass Sie den Ausgangsfileinnamen angeben, den Sie möglicherweise nicht im Voraus kennen, und es ist nicht immer möglich, ihn aus der URL zu extrahieren.
Es hält auch die gesamte Datei im Speicher beim Herunterladen, was schlechte Nachrichten beim Herunterladen großer Dateien ist.
Es wird nicht das geänderte Datum der ursprünglichen Quelldatei beibehalten, wie es viele Browser tun.
Auch (unter Windows PowerShell mit $ ProgressPreferenz als Standard) wird die Fortschrittsleiste so häufig aktualisiert, dass sie den Download drastisch verlangsamt.
Start-BitStransfer kann den Dateinamen automatisch bestimmen, funktioniert jedoch nicht für alle URLs und wird nur unter Windows unterstützt.
Einige URLs erfordern, dass sich verschiedene Benutzeragenten erfolgreich verbinden.
Dieses Modul löst diese Probleme:
Es verwendet die .NET HTTPCLIENT -Klasse (die jetzt für die Verwendung von Microsoft über die jetzt veraltete Webclient -Klasse empfohlen wird).
Es wird zunächst versuchen, den Dateinamen aus dem Inhaltsdispositions-Header zu holen. Die Header werden von einer regulären GET -Anfrage erhalten (wie einige Webserver nachgewiesen haben, dass sie Kopfanfragen ablehnen). Wenn dieser Header nicht vorhanden ist, extrahiert er den Dateinamen aus der absoluten URL (da die mitgelieferte URL an anderer Stelle umleiten kann).
Die Datei wird direkt auf die Festplatte gestreamt, anstatt sie vollständig im Speicher zu halten.
Das geänderte Datum wird aktualisiert, sobald der Download abgeschlossen ist, um den letzten modifizierten Header zu entsprechen, falls gefunden.
Die Fortschrittsleiste beschränkt sich auf die Aktualisierung aller 250 ms, um die Überbeanspruchung von Systemressourcen zu verhindern.
User Agent Strings für Chrome und den GoogleBot Web Crawler werden standardmäßig versucht.
Installieren Sie aus der PowerShell -Galerie, indem Sie den folgenden Befehl ausführen:
Installieren Sie Module -name psdownload
Resolve-uri "https://aka.ms/vs/17/release/vc_redist.x64.exe"
Dadurch wird der absolute URI (die umgeleitete URI) sowie den Dateinamen, die Dateigröße und das letzte geänderte Datum zurückgeführt, sofern dies bei den Antwortschätzen verfügbar ist.
Invoke -download -uri "https://aka.ms/vs/17/release/vc_redist.x64.exe" -Destination "$ env: userProfiledownloads"
Dadurch wird die Datei in den Download -Ordner heruntergeladen.
Die Pipeline -Eingabe wird ebenfalls unterstützt:
"https://aka.ms/vs/17/release/vc_redist.x64.exe","https://aka.ms/vs/17/release/vc_redist.x86.exe" | Invoke -download -destination "$ env: userProfiledownloads"
URL wird auch als Alias von URI akzeptiert.
Optionale Parameter:
Dateiname
Verwenden Sie dies, um den Dateinamen zu überschreiben, anstatt zu versuchen, automatisch zu erstellen.
Benutzeragent
Mozilla/5.0 (Windows NT 10.0; Win64; x64) Applewebkit/537,36 (KHTML, wie Gecko) Chrome/116.0.0.0 Safari/537.36
GoogleBot/2.1 (+http: //www.google.com/bot.html)
Überschreiben Sie den Standardbenutzeragenten. Standardmäßig wird es durch die Verwendung von Folgendes radeln:
Header
Standard ist @{'Accept' = ' / '}, das benötigt wird, um einige Server dazu zu bringen, einen Download zu bedienen, z. B. von Filezilla.
Temppath
Standardmäßig wird der laufende Download auf % temp % / $ env: temp gespeichert.
Ignoriert
Ignorieren Sie den Datum modifizierten Header, geändert, ist das Datum, an dem die Datei stattdessen heruntergeladen wurde.
Blockfile
Markieren Sie die vom Internet heruntergeladene Datei (standardmäßig tut sie dies nicht).
Noclobber
Verwenden Sie dies, um das Überschreiben einer vorhandenen Datei zu verhindern.
Noprogress
Fortschrittsbalken unterdrücken.
Passtrau
Gibt ein DateiInfo -Objekt für die heruntergeladene Datei in die Pipeline zurück.
Dies wurde gegen eine große Anzahl von URLs getestet. Bitte senden Sie ein Problem, wenn es keine bestimmte Datei herunterladen kann. Beachten Sie, dass auf einigen Webseiten ein JavaScript ausgeführt werden kann, um den tatsächlichen Download auszulösen. Diese Art von URL wird nicht unterstützt, sie muss direkt auf eine Ressource hinweisen, ohne dass Client-Side-Skripte ausgeführt werden müssen.