powershell 从延迟下载文件 Link

powershell download file from delayed Link

我正在尝试从页面下载 msi 包,该页面在后台进行重定向,下载我想要的文件。

这是我要从中下载 msi 的页面: https://remotedesktopmanager.com/de/home/thankyou/rdmmsi

我尝试了几个 PowerShell 脚本,但其中 none 个提取了正确的下载 URL 或下载了文件。 使用 Invoke-Webrequest -Outfile C:xxx 仅保存 HTML。

您提供的 Link 是主下载页面,几秒钟后会重定向到下载页面。

下载link是"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

谢谢

页面使用 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);)包含了我们要查找的字符串。

为了提取 url 我将变量转换为字符串,然后使用 SubString() 提取 url 本身。为此,我在该变量中查找第一个 ' 和最后一个 '

$urlString = $urlRedirectLine.ToString()
$url = $urlString.Substring($urlString.IndexOf("'")+1,$urlString.LastIndexOf("'")-$urlString.IndexOf("'")-1)

导致 $url 具有 url https://cdn.devolutions.net/download/Setup.RemoteDesktopManager.2021.1.25.0.msi

要下载文件,您可以再次使用 Invoke-RestMethod

Invoke-RestMethod -Uri $url -OutFile 'C:\tmp\rdm.msi'

我在尝试下载 httpd 时遇到了类似的错误。

以下对我有用(-UserAgent“NativeHost”)

$ENV:HTTPD_DOWNLOAD_URL = "https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.52-win64-VS16.zip"
$ENV:HTTPD_DOWNLOAD_ZIP = "httpd.zip"
Invoke-WebRequest -Uri $ENV:HTTPD_DOWNLOAD_URL -OutFile $ENV:HTTPD_DOWNLOAD_ZIP -UserAgent "NativeHost"; 

参考 https://social.technet.microsoft.com/Forums/en-US/23fccc30-5f84-4a84-8160-c6e95102b11c/powershell-invokewebrequest-sourceforge-urlsredirectiondynamic-content?forum=winserverpowershell