2011-11-28 09:56:40 +0000 2011-11-28 09:56:40 +0000
293
293

Windows PowerShell中wget的原生替代方案?

我知道我可以下载并安装上述的库(wget for Windows),但我的问题是:

在Windows PowerShell中,是否有一个原生的替代方案?

我需要wget简单地用HTTP GET从给定的URL中检索一个文件。例如:

wget http://www.google.com/

答案 (11)

243
243
243
2013-12-26 06:47:06 +0000

这里有一个简单的PS 3.0及以后的单行本,很好用,而且不涉及太多的PS吧:

wget http://blog.stackexchange.com/ -OutFile out.html

注意:

  • wgetInvoke-WebRequest的别名
  • Invok-WebRequest返回一个HtmlWebResponseObject,其中包含了很多有用的HTML解析属性,如链接、图片、表单、InputFields等。但在这种情况下,我们只是使用原始内容& –在写入磁盘之前,文件内容会先存储在内存中,这使得这种方法不适合下载大文件 -在Windows Server Core安装中,你需要把这个写成

-在2014年9月20日之前,我建议

如果你使用的是Windows 7,你需要安装Windows管理框架的第4版或更新版本。

你可能会发现,在$ProgressPreference = "silentlyContinue"之前做一个Invoke-WebRequest,会明显提高大文件的下载速度;这个变量控制了进度UI是否渲染。

186
186
186
2011-11-28 10:20:08 +0000

如果你只需要检索一个文件,你可以使用WebClient对象的DownloadFile方法:

$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)

$url 其中 $path是一个字符串,代表文件的URL,$path代表文件要保存到的本地路径。

88
88
88
2012-08-10 23:38:18 +0000

在即将到来的PowerShell 3版本中,有Invoke-WebRequest

Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html
18
18
18
2011-11-28 10:18:36 +0000

这有点乱,但有这篇博文给了你下载文件的说明。

另外,你可以使用BITS:

Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"

,它会显示进度,并将文件下载到当前目录。

6
6
6
2014-05-25 10:22:13 +0000

PowerShell V4单行本:

(iwr http://blog.stackexchange.com/).Content >index.html`

(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4

  • * * * * * * 这基本上就是Warren的(真棒)V3单行本 (感谢你的这个! ) - 只需稍作改动,就能在V4 PowerShell中工作。 Warren的单行本 - 只需使用wget而不是iwr - 应该仍然适用于V3(至少,我想,我没有测试过)。总之。但是,当试图在V4的PowerShell中执行时(我试过),你会看到PowerShell无法将wget解析为有效的cmdlet/程序。

对于那些感兴趣的人来说,那是–正如我在回复Bob的评论的时候发现的那样–因为在PowerShell V4中,wgetcurl被别名为Invoke-WebRequest,默认设置为iwr。因此,wget无法解决(同样,curl在这里也无法工作)

4
4
4
2014-08-12 10:48:51 +0000

这里有一个PowerShell函数,可以在下载文件之前解析简短的URL

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(' 

Get-FileFromUri http://example.com/url/of/example/file “`

,使用这个函数可以将文件下载到当前文件夹:

Get-FileFromUri http://example.com/url/of/example/file C:\example-folder

或者将文件下载到指定的文件夹:

&001)) { $destination += $filename } else { $destination += ‘ &001

,使用这个函数可以将文件下载到当前文件夹:

&001

或者将文件下载到指定的文件夹:

&001 + $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 }
}
} “` &001

,使用这个函数可以将文件下载到当前文件夹:

&001

或者将文件下载到指定的文件夹:

&001

2
2
2
2014-12-15 15:26:13 +0000
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)
}

&001

一些注释:

  1. 最后4行只有在验证代理的情况下才需要。对于简单的使用,(New-Object Net.WebClient).DownloadFile($url, $path)就可以了。
  2. 路径必须是绝对的,因为下载不是在当前目录下进行的,所以相对的路径会导致下载丢失。if (!$path) {...}部分可以处理简单的情况,即你只想用URL中给出的名字将文件下载到当前目录。
1
1
1
2017-09-27 03:21:03 +0000

如何在Windows上安装Ubuntu bash shell: YouTube: Running Bash on Ubuntu on Ubuntu on Windows! Windows子系统的Linux文档

0
0
0
2018-11-27 18:05:22 +0000

Invok-WebRequest的-outfile参数是一个字符串,所以如果你的文件名以数字开头,并且没有用引号括起来,则不会创建输出文件。

0
0
0
2019-03-04 13:25:33 +0000

如果你的Windows足够新(比如1809或更高的版本),有一个 “真正的 "curl。 选项”-O",或者是"–remote-name “会告诉curl,保存的文件的名字和URL的文件名部分一样。顺便说一下,它在cmd.exe中也能正常工作,没有任何变化。

使用与这里的另一个答案相同的例子

curl.exe -O http://demo.mediacore.tv/files/31266.mp4

(网站不允许我把这个作为评论添加到这里,因为我显然需要更多的 "声誉",所以它得到了一个新的答案)

-1
-1
-1
2019-04-27 20:13:44 +0000

这应该可以解决没有浏览器初始化的问题。注意"-UseBasicParsing “param.