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";
我正在尝试从页面下载 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";