如何解决powershell 从延迟链接下载文件
我正在尝试从页面下载 msi 包,该页面在后台进行重定向以下载我想要的文件。
这是我想从以下位置下载 msi 的页面: https://remotedesktopmanager.com/de/home/thankyou/rdmmsi
我尝试了几个 PowerShell 脚本,但都没有提取正确的下载 URL 或下载文件。
使用 Invoke-Webrequest -Outfile C:xxx
只保存 HTML。
解决方法
页面使用带有超时的 javascript 重定向到当前设置文件。这就是您不能使用 Invoke-WebRequest
的原因,因为它使用引擎盖下的 Internet Explorer 引擎,该引擎也执行此 javascript window.location
重定向(导致在默认浏览器中打开 url)。
要仅获取原始 HTML,您必须使用 Invoke-RestMethod
$website = Invoke-RestMethod -Uri 'https://remotedesktopmanager.com/de/home/thankyou/rdmmsi'
完整的网站现在存储在变量 $website
中,而无需解释 javascript。
要查找带有字符串 window.location
的行,我使用 Select-String
需要解析文件。因此,变量的内容首先存储在文件中,然后被解析。
$tmpFilePath = 'C:\tmp\t.txt'
Out-File -FilePath $tmpFilePath -InputObject $website
$urlRedirectLine = Select-String -Path $tmpFilePath -SimpleMatch "window.location"
Remove-Item -Path $tmpFilePath
新变量 $urlRedirectLine
(其内容现在是 C:\tmp\t.txt:999: setTimeout(function () { window.location = 'https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.2021.1.25.0.msi'; },4500);
)包含我们正在寻找的字符串。
要提取该网址,我将变量转换为字符串,然后使用 SubString()
提取网址本身。为此,我在该变量中查找第一个 '
和最后一个 '
。
$urlString = $urlRedirectLine.ToString()
$url = $urlString.Substring($urlString.IndexOf("'")+1,$urlString.LastIndexOf("'")-$urlString.IndexOf("'")-1)
导致 $url
的网址为 https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.2021.1.25.0.msi
要下载文件,您可以再次使用 Invoke-RestMethod
Invoke-RestMethod -Uri $url -OutFile 'C:\tmp\rdm.msi'
,
您提供的链接是主下载页面,几秒钟后重定向到下载。
下载链接是"https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.2021.1.25.0.msi"
使用以下命令下载该 MSI。
$url = "https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.2021.1.25.0.msi"
$dest = "C:\Setup.RemoteDesktopManager.2021.1.25.0.msi"
Start-BitsTransfer -Source $url -Destination $dest
您也可以使用上述变量使用 Invoke-WebRequest
Invoke-WebRequest -Uri $url -OutFile $dest
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。