PowerShell-Invoke-WebRequest, wie Sie automatisch verwenden Sie die ursprüngliche Datei-name?
Wie kann ich mit Invoke-WebRequest um eine Datei herunterzuladen, aber automatisch der name der Datei der gleiche, als wenn ich per browser heruntergeladen? Ich habe nicht gefunden, einen Weg, um -OutFile
arbeiten ohne manuelles angeben der Namen der Datei. Ich bin fein mit dieser Beteiligung ein paar andere Zeilen code.
Eine gute Lösung:
- Arbeiten, auch wenn die Datei name nicht in der Anfrage-URL. Zum Beispiel, die URL zum download der Visual Studio x64 Remote-Debugging-Tools ist
http://go.microsoft.com/fwlink/?LinkId=393217
aber es lädt die Dateirtools_setup_x64.exe
. - Nicht speichern Sie die gesamte Datei in den Speicher vor dem schreiben auf die Festplatte, es sei denn, das ist, was Invoke-WebRequest schon funktioniert auch mit dem -OutFile-Parameters (?)
Dank!
- Was passiert, wenn Sie die direkte url in das snippet -
http://download.microsoft.com/download/D/2/8/D28C6482-555B-4777-876F-85897C071FB6/rtools_setup_x64.exe
- Offenbar Invoke-WebRequest noch Kräfte, die Sie angeben, den lokalen Dateinamen.
- Ich möchte hinzufügen, eine gute Lösung wird die Verwendung des Content-Disposition-header zu beheben, die mit dem Namen.
wget
undcurl
genau das zu tun, und es ist eine einfache Erwartung eines Befehls zu, dass downloads von einer URL zu einer mit dem Namen. Viele Dienstleistungen dienen eine "Datei" aber hinter einer URL, die sich nicht selbst enthalten, die mit dem Namen. - Ich habe dieser PS-Umsetzung, die nicht zu Ehren der Content-Disposition-header. Vielleicht wäre es möglich, zu extrahieren, die Funktionalität zum erstellen einer PS-Funktion, die die Invoke-WebRequest könnte geleitet werden, um speichern Sie die Datei unter Verwendung der besten verfügbaren Angabe des Dateinamens aus der Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für das Beispiel gegeben, Sie gehen zu müssen, um die umgeleitete URL, die enthält den Namen der Datei heruntergeladen werden. Sie können verwenden Sie die folgende Funktion zu tun:
Dann ist es eine Frage der Analyse der Datei-name vom Ende der reagiert URL (GetFileName aus dem System.IO.Weg wird das tun):
Verlassen, dass
$FileName = rtools_setup_x64.exe
und Sie sollten in der Lage sein, Ihre download-Datei von dort aus.Invoke-Webrequest -Uri $uri -OutFile $(Split-Path -Path $uri -Leaf)
Dank Ryan ich habe eine halb-nutzbare Funktion:
Einer Grafik-Datei und die xml-Datei konnte ich herunterladen. Wenn ich versuche den download dieser Webseite und öffnen Sie Sie mit Edge funktioniert es manchmal.
Versuchen Sie diese Methode (kann nicht immer funktionieren, weil der Datei-name kann nicht in der response header)
inline; filename="zzzz.docx"
Hier ist der code, sampe:
Essenz meiner code - dieser funktioniert.. mit PS 5.1
Habe ich auskommentiert, der normal-Outfile-Anweisung, weil das bedeuten würde, ich wusste das mit dem Namen im Voraus.
Ich habe dies zusammen, basierend auf einer Reihe von Quellen, es gibt viele Möglichkeiten der Analyse der Content-Disposition-Headern, so verwenden Sie, was für Sie arbeitet.
Der Aufruf:
Analyse
Schreiben der Datei (meist pdf ' s für mich
powershell.exe Invoke-WebRequest -Uri serverIP/file.exe -OutFile C:\Users\file.exe