2011-10-10 11:19:21 +0000 2011-10-10 11:19:21 +0000
155
155

PowerShell中是否有

的等价物?是有类似的内置功能还是有第三方的cmdlet?

答案 (8)

104
104
104
2013-05-04 00:18:17 +0000
46
46
46
2015-10-30 23:21:20 +0000

从Powershell 5.0开始,如果不是之前的,curl就是Invoke-WebRequest的别名。

更新:

Powershell 6.x

使用别名不建议

从 [ Powershell 6.x “Core” ]开始,(https://github.com/PowerShell/PowerShell) curl不再是Invoke-WebRequest的别名(别名wget也被删除了)。

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
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com

Curl不再是Invok-WebRequest的别名(在Powershell 6.2.3上测试过),尽管在RFC “从Windows PowerShell中删除别名curl和wget”中的一个动议显然被拒绝了。

RFC指出 “wget/curl别名已经从PowerShell Core中删除了,所以[拥有这些别名的问题只限于Windows PowerShell。”

在结论中,Powershell团队还鼓励用户 “不要在脚本中依赖别名"。

正如@v6ak在评论中指出的那样,在PowerShell(5.0或更低版本)中使用Invoke-WebRequestcurl可能会出现这样的问题:如果并排安装,无意中会调用真正的curl或wget;而且,无论如何,都会造成混乱。

新的编码

建议你升级Powershell "core"(6.x或更高的版本),以便在使用wget(和许多其他文本输出命令)时,利用默认的编码utf8NoBOM。如果明确地这样做,你可以这样做:

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

然而,即使使用一个更短的、隐含的命令………..

PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content

<!doctype html><html itemscope="" itemtype="http://schem[etc ...]

………用Invoke-WebRequest进行编码(你可以通过在Visual Studio Code中打开保存的文件,并在状态栏中观察到 "UTF-8 "来验证这一点)。当然,如果你需要一些其他的编码,你可以明确地设置一些替代编码。

在Powershell 5.0及以下版本中,utf8NoBOM编码是不可用的,更不用说默认的了。 PowerShell.Utility, Out-File, 参数, -Encoding ](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-file?view=powershell-6#parameters) - Powershell 6, 新内容, Powershell Core 6.x中的新内容, Powershell Core 6.0中的突破性变化, "更改$OutputEncoding为使用UTF-8 NoBOM编码而不是ASCII #5369”

29
29
29
2011-10-10 11:26:27 +0000

优秀的Command Line Kung Fu博客有一篇文章,其中他们比较了curl、wget和相关的PowerShell命令

,简而言之:

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")

或者,如果你的Powershell/.Net版本不接受DownloadString的2个参数:

(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
15
15
15
2013-04-04 01:20:37 +0000

你也可以安装 Git for Windows ,然后把Git bin文件夹放到你的路径中。Git安装中,包括了 curl.exe等。安装好后,把%programfiles(x86)%\git\bin放到你的PATH里就可以了。然后你就可以在Windows命令提示符或PowerShell控制台中使用curl命令了。

14
14
14
2013-01-22 15:07:59 +0000

你可以用Chocolatey安装cURL,并在PowerShell CLI或cmd中让curl可用。

1
1
1
2019-06-04 03:10:31 +0000

curl

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powershell

Invoke-WebRequest -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4

# or 
# $(Get-Command curl) return "curl -> Invoke-WebRequest"
curl -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4
1
1
1
2011-12-11 16:38:28 +0000

在windows上最接近wgetcurl的是bit(后台智能传输服务),它有一些snippets准备好了powershell。

0
0
0
2018-02-13 12:01:17 +0000

这条命令应该可以使用:

Invoke-WebRequest -UseBasicParsing -Uri http://example.com/

自从PowerShell 3.0以来,它是Microsoft.PowerShell.Utility的一部分。Get $webclient.downloadstring to write to text file in Powershell ](https://stackoverflow.com/q/9365000/55075).