使用 PowerShell 从 URL 获取文件

问题描述 投票:0回答:1

我收到一封电子邮件,其中包含一个可立即开始下载文件的网站链接。我能够成功获取电子邮件和 URL,并且当我将 URL 粘贴到浏览器中时,它会自动开始下载。网页如下:

不幸的是,该文件只能以 .xls 格式发送,但我的最终目标是将其转换为 CSV。

我知道

Invoke-WebRequest
应该这样做,我的命令是:

Invoke-WebRequest -Uri $ExcelLink -OutFile 'C:\Temp\FileName.xls'
.

我还尝试过以下方法:

(New-Object System.Net.WebClient).DownloadFile($ExcelLink,'C:\Temp\FileName.xls')

我尝试将导出设置为 .xls 和 .csv,看来我只能获取原始 HTML 代码,而不是要下载的文件。在下面的屏幕截图中,左侧导出为 .csv,右侧导出为 .xls:

我已经做了相当多的研究,最有帮助的链接是这个 Stackoverflow 帖子

电子邮件中的链接不包含文件名。我从 URL 中删除了大量内容,但它看起来像这样:

https://_______.com/f/a/vl6K...hRdg~~/AA...gA~/RgRnjCy...QAAAM-

我尝试将文件名添加到 URL 末尾,但由于某种原因,它只是重定向到 Google。

有人知道如何只获取在浏览器中输入 URL 时自动开始下载的文件内容吗?

powershell httpwebrequest
1个回答
0
投票

对于将来发现此问题的任何人,我都能找到解决方案。首先,在电子邮件中的 URL 上单击

Invoke-WebRequest
。然后,查看
RawContent
属性。对于每个请求,这可能有所不同,但对于我的特定请求,有一段 javascript,其中有一个定义为
downloadUrl
的变量。在另一个
Invoke-WebRequest
中使用该 URL,我能够成功下载该文件。

这是一些示例代码,适用于我的特定网站。希望这能帮助人们将来排除故障。

# $ExcelLink is the URL included in the email, which opens the web page and prompts the automatic download
$Request = Invoke-WebRequest -Uri $ExcelLink
# The parentheses will grab the URL string variable in the first regex group
$DownloadUrlRegex = "var downloadUrl = '(\S+)';"
$Request.RawContent -match $DownloadUrlRegex | Out-Null
$DownloadUrl = $Matches[1]
Invoke-WebRequest -Uri $DownloadURL -OutFile $Destination
© www.soinside.com 2019 - 2024. All rights reserved.