Gibt es ein Äquivalent zu curl
in PowerShell? Verfügt es über eine ähnliche integrierte Funktion oder gibt es ein Cmdlet eines Drittanbieters?
Gibt es ein Äquivalent zu curl
in PowerShell? Verfügt es über eine ähnliche integrierte Funktion oder gibt es ein Cmdlet eines Drittanbieters?
Antworten:
PowerShell 3.0 verfügt über den neuen Befehl Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
Mehr Details:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
oder wget
in Powershell aliasiert .
Ab Powershell 5.0 ist, wenn nicht schon früher, curl
ein Alias für Invoke-WebRequest
.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
Alias iwr -> Invoke-WebRequest
Alias wget -> Invoke-WebRequest
So verwenden Sie den Befehl "unalias":
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
So geben Sie mehrere Eigenschaften der Anfrage wie folgt zurück ...
PS> Invoke-WebRequest -Uri https://www.google.com
StatusCode : 200
StatusDescription : OK
Content : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-AU"><head><meta content="text/html; charset=UTF-8"
http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/...
RawContent : HTTP/1.1 200 OK
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
... oder nur der Inhalt ...
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Die entsprechenden Alias-Befehle lauten ...
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Wenn Sie die Powershell-Standardeinstellungen und andere Aliase nutzen, können Sie die Befehle auf verkürzen
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... aber ich würde es nicht empfehlen. Ausführliche Befehle helfen anderen beim Lesen Ihres Codes.
Aktualisieren:
Ab Powershell 6.x ist "Core" curl
kein Alias mehr für Invoke-WebRequest
(der Alias wget
wird auch entfernt). Verwenden Sie stattdessen Invoke-WebRequest
direkt.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl ist nicht länger ein Alias für Invoke-WebRequest (getestet auf Powershell 6.2.3), obwohl ein Antrag in einem RFC anscheinend abgelehnt wurde, "die Aliase Curl und Wget aus Windows PowerShell zu entfernen" .
RFC-Hinweis "Die wget / curl-Aliase wurden bereits aus PowerShell Core entfernt, sodass das Problem [mit diesen Aliasen] auf Windows PowerShell beschränkt war."
Abschließend ruft das Powershell-Team die Benutzer dazu auf, "sich nicht auf Aliase in Skripten zu verlassen".
Wie @ v6ak in den Kommentaren unter curl
und wget
in PowerShell (5.0 oder niedriger) angemerkt hat, kann dies ein Problem sein bei: unbeabsichtigtem Aufrufen der echten Wellung oder Wget, wenn diese Seite an Seite installiert werden; und verursacht in jedem Fall Verwirrung.
Es wird empfohlen, Powershell "core" (6.x oder höher) zu aktualisieren, um die Standardcodierung utf8NoBOM
bei Verwendung Invoke-WebRequest
(und vielen anderen Textausgabebefehlen) zu nutzen. Wenn man das explizit machen würde, könnte man so etwas machen:
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
| Select-Object -ExpandProperty Content `
| Out-File jquery.fancybox.min.js `
-Encoding utf8NoBOM
Aber selbst wenn ein kürzerer, impliziter Befehl verwendet wird ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
Die Codierung mit utf8NoBOM
wird ausgeführt (Sie können dies überprüfen, indem Sie beispielsweise die gespeicherte Datei in Visual Studio Code öffnen und "UTF-8" in der Statusleiste beobachten).
Dateien, die mit gespeichert wurden utf8NoBOM
, verursachen in der Regel weniger Probleme, wenn Sie durch verschiedene Ökosysteme reisen. Wenn Sie eine andere Codierung benötigen, können Sie natürlich eine Alternative explizit festlegen.
In Powershell 5.0 und niedriger war die utf8NoBOM
Codierung nicht verfügbar, geschweige denn die Standardeinstellung.
Einzelheiten:
get-help curl
. Sie werden sehen Invoke-WebRequest [-Uri] <Uri> ...
, dass die Klammern []
weggelassen werden -Uri
können (und daher implizit aufgerufen werden). Wie ich im Hauptbeitrag erwähnt habe: Im Allgemeinen sollten Sie explizit angeben (wo Sie oder andere Ihren Code in Zukunft lesen werden).
[]
getan hat
get-help
in einer Version von en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form . Sie sollten dies gut lesen / überfliegen, da einige Versionen von Extended Backus Naur Form wahrscheinlich zur Beschreibung der Syntax vieler Sprachen verwendet werden, auf die Sie stoßen werden. Sie werden feststellen, dass unter en.wikipedia.org/wiki/… in Klammern [ ...]
die Syntax angegeben ist, die optional ist.
Der ausgezeichnete Blog Command Line Kung Fu enthält einen Beitrag, in dem Curl, Wget und die zugehörigen PowerShell-Befehle verglichen werden
In einer Nussschale:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Oder wenn Ihre Version von Powershell / .Net keine 2 Parameter akzeptiert für DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
DownloadFile
Funktion, die auch gut funktioniert.
Sie können Git auch für Windows installieren und dann den Ordner Git bin in Ihren Pfad einfügen. Die Git-Installation beinhaltet unter anderem curl.exe. Geben Sie nach der Installation einfach %programfiles(x86)%\git\bin
Ihren PFAD ein. Dann können Sie den Befehl curl über die Windows-Eingabeaufforderung oder die PowerShell-Konsole verwenden.
Sie können cURL mit Chocolatey installieren und curl in PowerShell CLI oder verwenden cmd
.
die nächste Sache, wget
oder curl
an Fenstern ist Bits (Background Intelligent Transfer Service), die einige Schnipsel bereit für Powershell hat.
Dieser Befehl sollte funktionieren:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Es ist Teil von Microsoft.PowerShell.Utility seit PowerShell 3.0.
Siehe auch: Holen Sie sich $ webclient.downloadstring, um in Powershell in eine Textdatei zu schreiben .