如何从PowerShell运行wget

1,226 阅读4分钟

wget是一个命令行工具,用于通过最广泛使用的互联网协议如HTTP、FTP、HTTPS和FTPS检索文件。因为它是一个非交互式的命令行工具,它可以从脚本、终端等处调用。你想从互联网上下载文件,但又不喜欢一遍又一遍地点击链接的想法?你可以通过使用PowerShell使这个过程自动化。

Windows PowerShell是一个自动化和脚本平台。它主要是为系统管理员和IT专业人士设计的,用于处理和自动化与Windows管理及其应用相关的过程。

PowerShell包括各种有用的功能和命令,在PowerShell中被称为cmdlets。微软版本的wget是PowerShell(PS)3.0中的一个基本命令,称为Invoke-WebRequest。wget作为一个别名存在于Invoke-WebRequest命令中。

PowerShell中的Invoke-WebRequest命令

Invoke-WebRequest是一个非交互式的网络下载器,或者我们可以说,它是一个允许系统在后台从任何网站下载文件而不需要用户登录的命令。HTTP和HTTPS请求被发送到特定的网络服务或页面。

之后,该命令解析请求-响应,并返回重要的HTML组件集合,如图片、链接等。Invoke-WebRequest命令还可以控制带有凭证的请求,而不管源位置是否要求用户登录。

在你的PowerShell中写出下面给出的命令,以便更好地理解Invoke-Web Request、其语法和别名。

> Invoke-WebRequest -?

用PowerShell做一个简单的文件请求

在本节中,我们将尝试为文件请求执行Invoke-WebRequest。为此,我们将在下面的命令中用"-UseBasicParsing "选项指定URI。这个选项是为了向后兼容。例如,在没有安装或配置Internet Explorer的情况下。

> Invoke-WebRequest http://httpbin.org/json -UseBasicParsing

Invoke-WebRequest cmdlet 将返回一个 Html Web 响应对象,其中有很多关于 HTML 解析属性的有用信息,如原始内容、标题、链接、表单、图像和输入字段等。

管理员可以使用Invoke-WebRequest命令在网络上传输数据并通过互联网测试服务。而wget是在不同的网络条件下创建的,使得它对不可靠的连接和缓慢的系统非常好。在PowerShell中,"wget "命令可以用来提取一个HTML网络对象,例如。

除此以外,任何不同的wget命令的执行都会在PowerShell中显示以下错误。

所以,最好利用 "Invoke-WebRequest"来达到同样的目的,它使用 "wget"作为别名。

在PowerShell中提取链接

你也可以利用Invoke-WebRequest来提取一个存在于特定网络文件上的链接列表。-"Uri"选项用于说明你的互联网资源的统一资源识别码(URI)。现在,检查下面给出的命令。

> (Invoke-WebRequest -Uri "https://aka.ms/pscore6-docs" -UseBasicParsing
).Links.Href

用PowerShell从网站上下载任何文件

我们已经看到了使用Invoke-WebRequest请求文件和从网上提取链接的方法。现在,我们将继续前进,从指定的URI下载一个完整的文件。我们将为此目的执行一个PowerShell脚本。因此,打开你的Windows PowerShell ISE并创建一个新文件。

之后,在你的PowerShell脚本中写出下面的代码。在"source"变量中指定URI"**source "**变量中指定URI。"**destination**"表示该文件在下载后将被放置的路径。"-Outfile"选项用于指定输出文件,Invoke-WebRequest命令将保存其响应。

$source = 'http://speedtest.tele2.net/10MB.zip'
$destination = 'E:\download\10MB.zip'
Invoke-WebRequest -Uri $source -OutFile $destination

将文件保存为 "testfile1.ps1",并运行这个PowerShell脚本。

无错误输出声明文件被成功下载。为了确认文件的存在,使用 "Get-ChildItem "cmdlet来查看指定文件夹的内容。

> Get-ChildItem “E:\download”

用PowerShell发送网络请求

现在,我们将编写一个脚本,向网站 "bing.com"发送一个网络请求。"Invoke-WebRequest "命令将向指定的网站发出请求。之后,网站的响应将被保存在"$Response "变量中。

下一条命令将提取输入文件的值,并使用管道操作符["|"]将其输送到Select-Object中。

$Response = Invoke-WebRequest -URI https://www.bing.com/search?q=how+many+feet+in+a+mile

$Response.InputFields | Where-Object {
    $_.name -like "* Value*"
} | Select-Object Name, Value

执行 "testfile2.ps1 "将显示以下输出。

如果你得到下面给出的输出中显示的错误,在Invoke-WebRequest命令中指定URI后使用"-**UseBasicParsing "**选项。

$Response = Invoke-WebRequest -URI https://www.bing.com/search?q=how+many+feet+in+a+mile -UseBasicParsing
$Response.InputFields | Where-Object {
    $_.name -like "* Value*"
} | Select-Object Name, Value

现在,执行同样的脚本,并进行上述修改,你将得到无错误的输出。

结论

大多数用户通过一次又一次的点击来下载文件已经很累了。这个过程也需要你的参与和宝贵的时间。现在你可以使用PowerShell来自动完成这个下载过程,它可以帮助你提高工作效率,让你在下载文件的时候从事其他活动。

PowerShell提供了几个有用的命令,被称为cmdletsInvoke-WebRequest就是其中之一。你可以从PowerShell运行wget,它是Invoke-WebRequest命令的一个别名。这篇文章向你展示了请求、发送和下载网络文件的方法,从网络上提取链接。