用 PowerShell 下载文件

我有一个到 CSV 文件的 URL,在浏览器中,我可以下载和打开没有问题。

我正在尝试使用 PowerShell 下载这个文件,但是没有成功。我尝试使用 Invoke-WebRequestStart-BitsTransfer和使用一个网络请求对象,但没有运气在那里。

124339 次浏览

Invoke-WebRequest附带一个参数,用于将其结果存储在一个文件中: -OutFile

Invoke-WebRequest $myDownloadUrl -OutFile c:\file.ext

如果您需要授权才能发送这样的请求:

Invoke-WebRequest $myAuthUrl /* whatever is neccesary to login */ -SessionVariable MySession
Invoke-WebRequest $myDownloadUrl -WebSession $MySession

要确定发生登录的表单的布局,可以使用 Invoke-WebRequest 返回对象。它将收集关于 HTML 中的表单和字段的信息(可能仅限于 Windows)。登录的里程数可能随着双因素身份验证是否活动而变化。也许你可以创建一些秘密链接到您的文件,不需要 Auth 或可能谷歌允许你创建一个私人访问令牌的某种,这可以发送来自授权头随着您的请求。

TLDR 回答 * :

方法1 ,默认情况下为同步 * *

Invoke-WebRequest $url -OutFile $path_to_file

(如果你得到错误 无法创建 SSL/TLS 安全通道Powershell 调用-使用 SSL/TLS 安全信道时 WebRequest 失败)

方法2 ,默认情况下为同步 * *

(New-Object System.Net.WebClient).DownloadFile($url, $path_to_file)

方法3 ,异步的,可能比其他两个慢得多,但是在带宽使用上非常温和(它使用 BITS 服务)。

Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $path_to_file

备注:

* : 这个答案适用于那些在谷歌上搜索“如何使用 PowerShell 下载文件”的人。

* * : 如果需要异步下载,请阅读帮助页面

一段时间以来,我一直使用 PS 脚本每两个月下载 PowerBI 和使用 BITS,它已经非常稳定,现在更强大,因为我删除了 Start-BitsTransfer结束的 -Asynchronous

$url = "https://download.microsoft.com/download/8/8/0/880BCA75-79DD-466A-927D-1ABF1F5454B0/PBIDesktopSetup.exe"
$output = "%RandomPath%\PowerBI Pro\PBIDesktopSetup.exe"
$start_time = Get-Date


Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output


#Commented out below because it kept creating "Tmp files"
#Start-BitsTransfer -Source $url -Destination $output -Asynchronous