Ich weiß, dass ich die oben genannte Bibliothek (wget für Windows) herunterladen und installieren kann, aber meine Frage lautet:
Gibt es in Windows PowerShell eine native Alternative zu wget
?
Ich muss wget
nur eine Datei von einer bestimmten URL mit HTTP GET abrufen. Zum Beispiel:
wget http://www.google.com/
Antworten:
Hier ist ein einfacher Einzeiler für PS 3.0 und höher, der funktioniert und nicht viel PS-Aufwand mit sich bringt:
Beachten Sie, dass:
wget
ist ein Alias fürInvoke-WebRequest
Bei Windows Server Core-Installationen müssen Sie dies als schreiben
Vor dem 20. September 2014 schlug ich vor
als Antwort. Dies funktioniert jedoch nicht in allen Fällen, da der
>
Operator (ein Alias fürOut-File
) die Eingabe in Unicode konvertiert.Wenn Sie Windows 7 verwenden, müssen Sie Version 4 oder höher des Windows Management Frameworks installieren.
Sie können feststellen , dass ein tun ,
$ProgressPreference = "silentlyContinue"
bevorInvoke-WebRequest
deutlich Download - Geschwindigkeit mit großen Dateien zu verbessern; Diese Variable steuert, ob die Fortschritts-Benutzeroberfläche gerendert wird.quelle
Wenn Sie nur eine Datei abrufen müssen, können Sie die DownloadFile- Methode des WebClient- Objekts verwenden:
Wo
$url
ist eine Zeichenfolge, die die URL der Datei darstellt und$path
den lokalen Pfad darstellt, in dem die Datei gespeichert wird?Beachten Sie, dass
$path
der Dateiname enthalten muss. Es kann nicht nur ein Verzeichnis sein.quelle
(new-object System.Net.WebClient).DownloadFile( '$url, $path)
, ist es die beste Korrespondenz, diewget
ich bisher gesehen habe. Vielen Dank!$client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
(new-object System.Net.WebClient).DownloadData($url) | Out-Null
Es gibt
Invoke-WebRequest
in der kommenden PowerShell-Version 3:quelle
dd
...-Outfile
Parameter irrelevant erscheint, wenn Sie nur eine Datei>
(zum Überschreiben) oder>>
(zum Anhängen) verwenden können.wget
:)wget
undcurl
standardmäßig mitInvoke-WebRequest
(iwr
) gekennzeichnet: DEs ist ein bisschen chaotisch, aber es gibt diesen Blog-Beitrag, der Anweisungen zum Herunterladen von Dateien enthält.
Alternativ (und dies ist eine, die ich empfehlen würde) können Sie BITS verwenden:
Es zeigt den Fortschritt an und lädt die Datei in das aktuelle Verzeichnis herunter.
quelle
Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
. Ich bin verwirrt: |PowerShell V4 One-Liner:
oder
Dies ist im Grunde der (großartige) V3-Einzeiler von Warren (danke dafür!) - mit nur einer kleinen Änderung, damit er in einer V4-PowerShell funktioniert.
Warrens Einzeiler - der einfach verwendet wird
wget
und nicht verwendet wirdiwr
- sollte immer noch für V3 funktionieren (zumindest denke ich, habe ihn aber nicht getestet). Sowieso. Wenn Sie jedoch versuchen, es in einer V4- PowerShell auszuführen (wie ich es versucht habe), wird PowerShell nichtwget
als gültiges Cmdlet / Programm aufgelöst.Für Interessenten, das ist - wie ich aus nahm Bob Kommentar in Antwort auf die akzeptierte Antwort (Danke, Mann!) - denn wie der Powershell - V4,
wget
undcurl
ist auf aliasedInvoke-WebRequest
, aufiwr
standardmäßig . Somitwget
kann nicht gelöst werden (wie auchcurl
hier nicht funktionieren kann) .quelle
Hier ist eine PowerShell-Funktion, die kurze URLs auflöst, bevor die Datei heruntergeladen wird
Verwenden Sie dies, um die Datei in den aktuellen Ordner herunterzuladen:
Oder um die Datei in einen bestimmten Ordner herunterzuladen:
quelle
Die folgende Funktion erhält eine URL.
Einige Kommentare:
(New-Object Net.WebClient).DownloadFile($url, $path)
funktioniert gut.if (!$path) {...}
Abschnitt wird der einfache Fall behandelt, in dem Sie die Datei nur unter Verwendung des in der URL angegebenen Namens in das aktuelle Verzeichnis herunterladen möchten.quelle
Verwenden Sie die Windows 10-Bash-Shell, die wget enthält, sobald die Windows-Funktion eingerichtet ist.
So installieren Sie die Ubuntu-Bash-Shell unter Windows:
YouTube: Bash unter Ubuntu unter Windows ausführen!
Windows-Subsystem für Linux-Dokumentation
quelle
Wenn Ihr Windows neu genug ist (wie Version 1809 oder neuer), ist eine "echte" Locke verfügbar. curl hat die Kommandozeilenoption "-O" (Großbuchstabe O; Kleinbuchstabe macht das nicht!) Die Option "-O", alternativ "--remote-name" teilt curl mit, dass die gespeicherte Datei Gleicher Name wie der Dateinamen-Teil der URL.
Man muss dies als "curl.exe" starten, um es vom Alias "curl" für "Invoke-WebRequest" zu unterscheiden. Im Übrigen funktioniert es in cmd.exe ohne Änderungen.
Verwenden Sie das gleiche Beispiel wie in einer anderen Antwort hier
(Die Seite erlaubt mir nicht, dies als Kommentar hinzuzufügen, da ich dafür anscheinend mehr "Ansehen" brauche - damit es eine neue Antwort bekommt.)
quelle
Invoke-WebRequest mit dem Parameter -outfile erwartet eine Zeichenfolge. Wenn Ihr Dateiname also mit einer Zahl beginnt und nicht in Anführungszeichen steht, wird keine Ausgabedatei erstellt.
z.B.
Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Dateinamen, die mit einem Buchstaben beginnen, sind davon nicht betroffen.
quelle
wget
ist ein Alias vonInvoke-WebRequest
und eine ähnliche wie oben)Dies sollte funktionieren, damit Sie die nicht vom Browser initialisierten Dinge umgehen können. Beachten Sie den Parameter "-UseBasicParsing".
quelle
-UseBasicParsing
.