powershell - 如何使用 Powershell System.Net.WebClient 和自定义用户代理字符串保存 "browser-initiated download"文件?

标签 powershell amazon-web-services amazon-ec2 scripting

启动 EC2 实例时,我在 AWS EC2 UserData 部分运行一些命令,并希望从 Microsoft 下载文件 https://www.microsoft.com/en-us/download/confirmation.aspx?id=40784 (它是 Visual Studio 2013 的 Visual C++ 可再发行组件包)启动时。

到目前为止我有以下命令:

powershell -Command "$cli = New-Object 
System.Net.WebClient;$cli.Headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 
6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 
Safari/537.36';$cli.DownloadFile('https://www.microsoft.com/en-
us/download/confirmation.aspx?id=40784', 'C:\UserData\vcredist_arm.exe')"

它使用 Powershell System.Net.WebClient 方法,但看起来它正在下载 HTML 页面,而不是您首先浏览该页面时下载的可执行文件,然后浏览器会询问您要将文件保存在哪里文件。

如何使用 Powershell 下载实际的可执行文件而不是 https://www.microsoft.com/en-us/download/confirmation.aspx?id=40784 处的页面?

最佳答案

您提供的 URL 是 HTTP 页面,因此这就是您下载该页面而不是 exe 的原因。要解决此问题,您必须获得指向要下载的文件的直接链接,通常页面会为您处理此问题,但 C# Web 客户端未进行编码来执行此操作。

在这种情况下,您可以通过以下方式获取直接下载链接:

  1. 点击点击此处链接如果您的下载在 30 秒后未开始,请点击此处
  2. 单击此处下载链接复制到您要下载的产品,在本例中为https://download.microsoft.com/download/2/E/6/2E61CFA4- 993B-4DD4-91DA-3737CD5CD6E3/vcredist_arm.exe
  3. 使用它代替https://www.microsoft.com/en- us/download/confirmation.aspx?id=40784 用于 webclient 对象。

关于powershell - 如何使用 Powershell System.Net.WebClient 和自定义用户代理字符串保存 "browser-initiated download"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623314/

相关文章:

powershell - Azure PowerShell 自动化 "no default subscritpion has been designated"

amazon-web-services - 是否可以验证 aws v4 签名?

amazon-web-services - 在 terraform 中为 aws_api_gateway_integration 指定请求模板

amazon-ec2 - Terraform 失败 remote-exec (aws/ec2)

amazon-web-services - 用于 SSH 的 Amazon EC2 实例连接 - 安全组?

performance - EC2 上的 Hadoop : No performance gain when increasing number of slaves

powershell - 使用带 SSL 的 PowerShell 'Invoke-WebRequest' 时,如何在断开连接后在客户端删除 'session'?

Powershell,从txt文件中读取并格式化数据(删除行,删除它们之间的空格)

rest - 如何将 S3 用作静态网页和 EC2 作为 REST API 一起使用? (AWS)

powershell - 在PowerShell脚本中测试路径的位置