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



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

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

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:UserDatavcredist_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. 单击Click here链接 inIf your download does not start after 30 seconds, Click here
  2. Click here下载链接复制到您要下载的产品,在本例中为https://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_arm.exe
  3. 使用它代替 Web 客户端对象的https://www.microsoft.com/en- us/download/confirmation.aspx?id=40784

最新更新