Windows PowerShell中wget的原生替代方案?
我知道我可以下载并安装上述的库(wget for Windows),但我的问题是:
在Windows PowerShell中,是否有一个原生的替代方案?
我需要wget
简单地用HTTP GET从给定的URL中检索一个文件。例如:
wget http://www.google.com/
我知道我可以下载并安装上述的库(wget for Windows),但我的问题是:
在Windows PowerShell中,是否有一个原生的替代方案?
我需要wget
简单地用HTTP GET从给定的URL中检索一个文件。例如:
wget http://www.google.com/
这里有一个简单的PS 3.0及以后的单行本,很好用,而且不涉及太多的PS吧:
wget http://blog.stackexchange.com/ -OutFile out.html
注意:
wget
是Invoke-WebRequest
的别名-在2014年9月20日之前,我建议
如果你使用的是Windows 7,你需要安装Windows管理框架的第4版或更新版本。
你可能会发现,在$ProgressPreference = "silentlyContinue"
之前做一个Invoke-WebRequest
,会明显提高大文件的下载速度;这个变量控制了进度UI是否渲染。
如果你只需要检索一个文件,你可以使用WebClient对象的DownloadFile方法:
$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)
$url
其中
$path
是一个字符串,代表文件的URL,$path
代表文件要保存到的本地路径。
在即将到来的PowerShell 3版本中,有Invoke-WebRequest
:
Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html
这有点乱,但有这篇博文给了你下载文件的说明。
另外,你可以使用BITS:
Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"
,它会显示进度,并将文件下载到当前目录。
PowerShell V4单行本:
(iwr http://blog.stackexchange.com/).Content >index.html`
或
(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4
wget
而不是iwr
- 应该仍然适用于V3(至少,我想,我没有测试过)。总之。但是,当试图在V4的PowerShell中执行时(我试过),你会看到PowerShell无法将wget
解析为有效的cmdlet/程序。对于那些感兴趣的人来说,那是–正如我在回复Bob的评论的时候发现的那样–因为在PowerShell V4中,wget
和curl
被别名为Invoke-WebRequest
,默认设置为iwr
。因此,wget
无法解决(同样,curl
在这里也无法工作)。
这里有一个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
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
一些注释:
(New-Object Net.WebClient).DownloadFile($url, $path)
就可以了。if (!$path) {...}
部分可以处理简单的情况,即你只想用URL中给出的名字将文件下载到当前目录。如何在Windows上安装Ubuntu bash shell: YouTube: Running Bash on Ubuntu on Ubuntu on Windows! Windows子系统的Linux文档