admin 管理员组

文章数量: 887006

系统:win10
powershell 版本:5.1(在终端用$psversiontable查看)

wget(Invoke-WebRequest)

windows的powershell中也有跟linux中同名的wget文件下载工具,只不过powershell中的wget是Invoke-WebRequest命令的别名:

# 利用get-alias命令:
PS D:\> Get-Alias wget
# 输出:
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           wget -> Invoke-WebRequest

而且用法也跟linux下的wget不同。如果只是简单的输入命令:

PS D:\> wget https://github.com/lutzroeder/netron/releases/download/v5.7.0/Netron-Setup-5.7.0.exe

输出的只是解析之后的响应信息以及链接、图像和其他重要 HTML 元素的集合,如:

StatusCode        : 200
StatusDescription : OK
Content           : {77, 90, 144, 0...}
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Content-MD5: 4cjz+6tF92ipzKzI992N5w==
                    x-ms-request-id: becf9f72-101e-0065-0f37-4e8c21000000
                    x-ms-version: 2020-04-08
                    x-ms-creation-time: Mon, 11 Apr 2022 01...
Headers           : {[Connection, keep-alive], [Content-MD5, 4cjz+6tF92ipzKzI992N5w==], [x-ms-request-id, becf9f72-101e
                    -0065-0f37-4e8c21000000], [x-ms-version, 2020-04-08]...}
RawContentLength  : 118186480

正确用法:如果要下载文件,需要用命令:
(要注意的是,参数有个是Uri,是Uniform Resource Identifier的缩写,而不是常见的url)

PS D:\> wget -Uri https://github.com/lutzroeder/netron/releases/download/v5.7.0/Netron-Setup-5.7.0.exe -OutFile ./Netron-Setup-5.7.0.exe
# -OutFile后面是下载文件保存的位置

另外,wget还有很多不错的功能,比如,分析一个网页中的所有链接:

PS D:\> (wget -Uri "https://ustc.edu").Links.Href
# 会输出:
http://wlkt.ustc.edu.cn
http://zsb.ustc.edu.cn
http://aga.ustc.edu.cn/
zxss.htm
http://en.ustc.edu.cn/
......

官网文档有更详细的介绍,见参考部分。

附注

如果想要在windows中使用类似linux的wget工具,可以到sourceforge中下载。用法跟linux里的一样

WebClient

简单的使用方法如下:

PS D:\> $download = [System.Net.WebClient]::new()
# 或者是:
PS D:\> $download = New-Object System.Net.WebClient
然后是下载文件:
# 方法是:$download.DownloadFile('path1', 'path2')
PS D:\> $download.DownloadFile('https://github/apache/tvm/blob/main/README.md', 'd:\readme.md')

需要注意的是,这种方法中,路径都需要加上英文符号’或者是",而wget可加可不加;
另外,如果在存储路径,即path2中没有相对路径或者绝对路径的话,会默认下载到用户路径里:c:\users\name

遇到的问题

以上方法有时候下载下来的只是网页信息。比如,从github仓库里下载一个单独的文件,但最后保存的却是整个页面的html信息:

PS D:\> wget -Uri https://github.com/apache/tvm/blob/main/README.md -OutFile readme.md
# 或者是:
PS D:\> $download.DownloadFile('https://github/apache/tvm/blob/main/README.md', 'd:\readme.md')

这些方法下载下来的虽然名字都是.md格式的文件,但是内容却都是网页信息:

<!DOCTYPE html>
<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" >
  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent/">
  <link rel="preconnect" href="https://github.githubassets" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent">
......

在下载.onnx格式的文件的时候出现的也是同样的问题。主要是github仓库里面的文件点击之后不会直接下载,而且先有个预览网页,如需下载还要手动点击:

而且download的链接就是此预览网页的地址,所以最后下载下来的只是此网页的信息。


参考:

microsoft官网文档:Invoke-WebRequest
WebClient Class

本文标签: 自带 文件 工具 Powershell Windows