代码编织梦想

Powershell下载文件的三种方法


layout: post
title: Powershell下载文件的三种方法
date: 2021-09-29
tags: [“BitsTransfer”,“download”,“powershell”,“powershell”,“计算机技术”]


使用powershell不借助第三方软件下载文件(据我所知)有三种方法:Invork-WebRequest, System.Net.WebClient, Start-BitsTransfer.

Invork-WebRequest

Invork-WebRequest -Uri "<File URL>" -OutFile "<File Name>"
#吐槽一下这个Uri参数,不应该是Url吗?
#该参数有几个别名,wget、iwr、curl,但在pwsh7.0后wget和curl被取消了,可能开发者也觉得这样凑热度不太好。
iwr -Uri "<File URL>" -OutFile "<File Name>"

这个命令本来是用于发起web请求的,用OutFile参数将响应保存下来就能实现文件的下载。

不过这个命令下载文件时先将数据存在内存里,全部下载完成后才会写入磁盘,因此下载大文件时容易炸内存。

值得一提的是该命令返回的对象是经过解析的Microsoft.PowerShell.Commands.WebResponseObject对象,可以直接读出页面中的内容,所以可以用来写一个简单的爬虫。

PS> $bingImageSearch = Invoke-WebRequest -Uri "https://cn.bing.com/images/search?q=cats&first=1&tsc=ImageBasicHover"
PS> $bingImageSearch.Images | select class,alt,src                                                          

class              alt             src
-----              ---             ---
id_avatar sw_spd   个人资料图片    data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgY...
rms_img                            /rp/kFAqShRrnkQMbH6NYLBYoJ3lq9s.png
fltIco rms_img     筛选器          data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNHB4IiBmb2N1c2FibGU9I...
fltFillIco rms_img 筛选器          data:image/svg+xml;base64,PHN2ZyBmb2N1c2FibGU9ImZhbHNlIiB4bWxucz0iaHR0cDovL3d3dy53M...
mimg rms_img       cats 的图像结果 https://tse1-mm.cn.bing.net/th/id/OIP-C.C0bliNuG3LA1bDPoRTeAnwHaFj?w=191&h=143&c=7&...
mimg rms_img       cats 的图像结果 https://tse3-mm.cn.bing.net/th/id/OIP-C.23-NBtgiB3zQCjz3qlD9YgHaLG?w=191&h=286&c=7&...
mimg rms_img       cats 的图像结果 https://tse3-mm.cn.bing.net/th/id/OIP-C.Ftos_Tg660JqK0WpjPH-HQHaJ4?w=191&h=255&c=7&...
##此处省略多行

PS>  $bingImageSearch.Links | select id,class,href 

id                      class             href
--                      -----             ----
                        b_logoArea        /?FORM=Z9FD1
sw_clx                                    javascript:void(0);
                                          javascript:void(0);
##此处省略多行

PS> $bingImageSearch.InputFields | Format-Table 

outerHTML
---------
<input class="b_searchbox" id="sb_form_q" name="q" aria-autocomplete="both" aria-label="在此处输入你的搜索 - 输入时会...
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabIndex="0" name="go" value="搜索" />
<input id="sa_qs" name="qs" value="ds" type="hidden" />
##此处省略多行

WebClient对象

#实例化WebClient对象
PS> $client = [System.Net.WebClient]::new()
#调用DownLoadFile方法。
PS> $client.DownloadFile("<File URL>","<File Name>")

#该方法的重载:
PS> $client.DownloadFile

OverloadDefinitions
-------------------
void DownloadFile(string address, string fileName)
void DownloadFile(uri address, string fileName)

这种方法据说是速度最快的,虽然我没有实际实验过,但想想也是,毕竟直接调用库里的类就不需要解析响应也不需要在异步任务中排队,肯定速度快。很适合多线程的下载任务。

不过这个方法也有缺点,下载过程没有进度条,不知道已经下载了多少。

BitsTransfer模块

这是我个人最为推荐的方法。

Start-BitsTransfer -Source "<File URL>" -Destination "<File Name>"

这个模块也是Windows Update用来下载更新的模块,能够实现异步下载(排队的那种,不是多线程),并且管理方便。

可以上BitsTransfer Module ’ Microsoft Docs阅读完整的文档,这里只举几个例子。

#下载多个文件
PS> $list = @"  
>> source,destination
>> s1,d1
>> s2,d2
>> s3,d3
>> "@ 
PS> $list = $list | ConvertFrom-Csv
PS> $list | Start-BitsTransfer

#异步下载
PS> Start-BitsTransfer -Source "<File URL>" -Destination "<File Name>" -Asynchronous
PS> Get-BitsTransfer

也可以用来上传文件。

Start-BitsTransfer -Source "<Source>" -Destination "<Destination>" -TransferType Upload

或者设置优先级,使其不会与正在进行的任务抢带宽。

Start-BitsTransfer -Source "<Source>" -Destination "<Destination>" -Priority Low

本文同步发表于我的个人博客NucomBlog
转载请注明出处,谢谢。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/EadderYin/article/details/120573622

windows命令行下载文件_mirror97black的博客-爱代码爱编程_windows命令行下载文件

vbs下载 通过写一个vbs脚本来下载文件 在windows机器中,命令行执行以下各条命令 echo Set Post = CreateObject("Msxml2.XMLHTTP") >>zl.vbs e

powershell下载|windows powershell64/32位(支持win7)下载v6.1.0_木子先生�的博客-爱代码爱编程

点击下载来源:Windows PowerShell64/32位 V6.1.0 Windows PowerShell是由微软公司研发推出的任务自动化和配置管理框架,提供集成的脚本编写环境,具有强大的功能,比如:远程处理、功能模块、高级的功能、后台作业、事件处理、脚本国际化、脚本调试、新的命令等,帮助IT 专业人员、程序员和高级用户更好、高效率的完成工作。P

windows powershell 使用wget 下载文件的代码格式_chongminglun的博客-爱代码爱编程

在linux中 wget是很方便的下载命令 在powershell中 也可以使用 wget 但是直接用的话不会正常下载,而是返回如下结果 wget https://github.com/cornerken/bert/arc

使用powershell进行文件下载-爱代码爱编程

打开powershell的初衷是用.ps1脚本下载论文相关资料,但是完全没听说过这个东西,眼前一黑。 打开powershell 以我浅薄的知识储备,我将其理解为一个类似于cmd或者shell的一个命令行工具, 启动方式1 普通启动 按win+r,输入powershell即可启动。 启动方式2 以管理员身份启动 这种启动方式对于我这种小白来说很有

powershell使用curl wget-爱代码爱编程

在powershell(<=5.1)中curl和wget是Invoke-WebRequest的一个别名 太难受了,怎么用上真的curl和wget呢 首先你要先安装curl,wget 1、手动安装 curl: https://curl.haxx.se/windows/ wget: http://gnuwin32.sourceforge.net/pa

Win10 PowerShell命令行下载文件-爱代码爱编程

Win10 PowerShell命令行下载文件 $client = new-object System.Net.WebClient $client.DownloadFile("https://win-web-nf01-sycdn.kuwo.cn/5a283dcc74917ac7f239e248ac8a273f/60223fba/resource/

如何使用window powershell下载网址中的资源-爱代码爱编程

首先,需要打开Windows中自带的powershell。 可以通过在cmd中输入start powershell打开; 也可以在【开始】中,通过搜索找到并打开powershell。 在打开的poershell窗口中,依次输入如下命令: $client = new-object System.Net.WebClient (按回车) $client.

在字节跳动和滴滴干了 2 年后端开发,总结出的划水经验…-爱代码爱编程

先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入滴滴,之后跳槽到了头条,一直从事后端研发相关的工作。之前没有实习经历,算是两年半的工作经验吧。 这两年半之间完成了一次晋升,换了一家公司,有过开心满足的时光,也有过迷茫挣扎的日子,不过还算顺利地从一只职场小菜鸟转变为了一名资深划水员。 在这个过程中,总结出了一些还算实用的划水经验,有些是自