Native alternative zu wget in Windows PowerShell?
Ich weiß, dass ich die aformentionierte Bibliothek (wget für Windows) herunterladen und installieren kann, aber meine Frage lautet:
Gibt es in Windows PowerShell eine native Alternative zuwget
?
Ich brauche wget
, um einfach eine Datei von einer bestimmten URL mit HTTP GET abzurufen. Zum Beispiel:
wget http://www.google.com/
11 answers
Hier ist ein einfacher PS 3.0 und späterer Einzeiler, der funktioniert und nicht viel PS barf beinhaltet:
wget http://blog.stackexchange.com/ -OutFile out.html
Beachten Sie, dass:
-
wget
ist ein alias fürInvoke-WebRequest
- Invoke-WebRequest gibt ein HtmlWebResponseObject zurück, das viele nützliche HTML-Analyseeigenschaften wie Links, Bilder, Formulare, Eingabefelder usw. enthält., aber in diesem Fall verwenden wir nur den Rohinhalt
- Der Dateiinhalt wird im Speicher gespeichert, bevor er auf die Festplatte geschrieben wird. der Ansatz ist für das Herunterladen großer Dateien ungeeignet. [15]}
-
Bei Windows Server Core-Installationen müssen Sie dies als
wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html
-
Vor Sep 20 2014 schlug ich
(wget http://blog.stackexchange.com/).Content >out.html
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 neuer der Windows-Verwaltung installieren Rahmen.
Sie können feststellen, dass das Ausführen eines $ProgressPreference = "silentlyContinue"
vor Invoke-WebRequest
die Downloadgeschwindigkeit bei großen Dateien erheblich verbessert; Diese Variable steuert, ob die Fortschritts-Benutzeroberfläche gerendert wird.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-02-13 06:14:42
Wenn Sie nur eine Datei abrufen müssen, können Sie die DownloadFile - Methode des WebClient - Objekts verwenden:
$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)
Wobei $url
eine Zeichenfolge ist, die die URL der Datei darstellt, und $path
den lokalen Pfad darstellt, in dem die Datei gespeichert wird.
Beachten Sie, dass $path
den Dateinamen enthalten muss; es kann nicht nur ein Verzeichnis sein.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-04-29 16:46:49
Es gibt Invoke-WebRequest
in der kommenden PowerShell-version 3:
Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-04-29 16:48:39
Es ist ein bisschen chaotisch, aber es gibt diesen Blogpost, der Ihnen Anweisungen zum Herunterladen von Dateien gibt.
Alternativ (und dies ist eine, die ich empfehlen würde) können Sie BITS verwenden:
Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"
Es zeigt den Fortschritt an und lädt die Datei in das aktuelle Verzeichnis herunter.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-11-28 10:18:36
PowerShell V4 Einzeiler:
(iwr http://blog.stackexchange.com/).Content >index.html`
Oder
(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4
Dies ist im Grunde Warrens (awesome) V3 Einzeiler (danke dafür!) - mit nur einer winzigen Änderung, damit es in einer V4 PowerShell funktioniert.
Warrens Einzeiler - der einfach wget
anstelle von iwr
- sollte immer noch für und funktionieren (Zumindest denke ich; habe es jedoch nicht getestet). Wie dem auch sei. Aber beim Versuch, es in einem V4 PowerShell (wie ich versucht habe), sehen Sie, dass PowerShell wget
nicht als gültiges Cmdlet/Programm auflöst.
Für Interessierte ist das - wie ich von Bobs Kommentar als Antwort auf die akzeptierte Antwort (danke, Mann!) - weil ab PowerShell V4, wget
und curl
mit einem Alias versehen sind Invoke-WebRequest
, standardmäßig auf iwr
gesetzt. Somit kann wget
nicht aufgelöst werden (sowie curl
kann hier nicht funktionieren).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-20 10:16:54
Hier ist eine PowerShell-Funktion, die kurze URLs auflöst, bevor die Datei heruntergeladen wird
function Get-FileFromUri {
param(
[parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[string]
[Alias('Uri')]
$Url,
[parameter(Mandatory=$false, Position=1)]
[string]
[Alias('Folder')]
$FolderPath
)
process {
try {
# resolve short URLs
$req = [System.Net.HttpWebRequest]::Create($Url)
$req.Method = "HEAD"
$response = $req.GetResponse()
$fUri = $response.ResponseUri
$filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
$response.Close()
# download file
$destination = (Get-Item -Path ".\" -Verbose).FullName
if ($FolderPath) { $destination = $FolderPath }
if ($destination.EndsWith('\')) {
$destination += $filename
} else {
$destination += '\' + $filename
}
$webclient = New-Object System.Net.webclient
$webclient.downloadfile($fUri.AbsoluteUri, $destination)
write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
} catch {
write-host -ForegroundColor DarkRed $_.Exception.Message
}
}
}
Verwenden Sie es so, um die Datei in den aktuellen Ordner herunterzuladen:
Get-FileFromUri http://example.com/url/of/example/file
Oder um die Datei in einen bestimmten Ordner herunterzuladen:
Get-FileFromUri http://example.com/url/of/example/file C:\example-folder
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-04-24 19:42:15
Die folgende Funktion erhält eine URL.
function Get-URLContent ($url, $path) {
if (!$path) {
$path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
}
$wc = New-Object Net.WebClient
$wc.UseDefaultCredentials = $true
$wc.Proxy.Credentials = $wc.Credentials
$wc.DownloadFile($url, $path)
}
Einige Kommentare:
- Die letzten 4 Zeilen werden nur benötigt, wenn Sie sich hinter einem authentifizierenden Proxy befinden. Für die einfache Verwendung funktioniert
(New-Object Net.WebClient).DownloadFile($url, $path)
einwandfrei. - Der Pfad muss absolut sein, da der Download nicht in Ihrem aktuellen Verzeichnis erfolgt, sodass relative Pfade dazu führen, dass der Download irgendwo verloren geht.
- Der Abschnitt
if (!$path) {...}
behandelt den einfachen Fall, in dem Sie die Datei nur in das aktuelle Verzeichnis herunterladen möchten verwenden des in der URL angegebenen Namens.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-12-15 15:26:13
Wenn Ihr Windows neu genug ist (wie Version 1809 oder neuer), ist eine "echte" Curl verfügbar. curl hat die Befehlszeilenoption "- O " (Großbuchstabe O; kleiner Buchstabe macht nicht dasselbe!) Die Option "-O", alternativ "--remote-name" teilt curl mit, dass die gespeicherte Datei den gleichen Namen wie der Dateinamenteil der URL erhält.
Man muss dies als "curl.exe", um es vom Alias "curl" für "Invoke-WebRequest"zu unterscheiden. Übrigens funktioniert es in cmd.exe-Datei, ohne Anpassungen.
Mit dem gleichen Beispiel wie in einer anderen Antwort hier
curl.exe -O http://demo.mediacore.tv/files/31266.mp4
(Die Seite erlaubt mir nicht, dies als Kommentar hinzuzufügen, da ich anscheinend mehr "Reputation" dafür brauche - also bekommt es eine neue Antwort)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-04 13:25:33
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:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-01-12 10:08:08
Invoke-WebRequest-mit -outfile-parameter erwartet einen string, also, wenn Ihr Dateiname beginnt mit einer Reihe, und nicht in Anführungszeichen eingeschlossen ist, wird keine Ausgabe-Datei erstellt.
ZB. Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"
Dies wirkt sich nicht auf Dateinamen aus, die mit einem Buchstaben beginnen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-03-23 15:21:31
Dies sollte für Sie funktionieren, um das ohne Browser initialisierte Zeug zu umgehen. Beachten Sie den Parameter "-UseBasicParsing".
Invoke-WebRequest http://localhost -UseBasicParsing
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-04-27 20:13:44