我收到一封电子邮件,其中包含一个可立即开始下载文件的网站链接。我能够成功获取电子邮件和 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 时自动开始下载的文件内容吗?
对于将来发现此问题的任何人,我都能找到解决方案。首先,在电子邮件中的 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