如何使用Invoke-WebRequest下载文件,但自动使文件名与通过浏览器下载的文件名相同?我还没有找到一种方法,使-OutFile
工作,而无需手动指定文件名。我很好这涉及其他几行代码。
一个好的解决方案将:
- 即使文件名不在请求URL中,也可以工作。例如,下载Visual Studio x64远程调试工具的URL是
http://go.microsoft.com/fwlink/?LinkId=393217
,但它下载的是文件rtools_setup_x64.exe
。 - 在写入磁盘之前不将整个文件保存到内存中,除非这是Invoke-WebRequest已经使用-OutFile参数(?)
谢谢!
5条答案
按热度按时间tsm1rwdh1#
对于给定的示例,您将需要获取重定向的URL,其中包括要下载的文件名。您可以使用以下函数来执行此操作:
接下来就是从响应URL的末尾解析文件名的问题了(从System.IO.Path中的GetFileName可以做到这一点):
这将留下
$FileName = rtools_setup_x64.exe
,您应该能够从那里下载文件。57hvy0tb2#
尝试此方法(可能并不总是有效,因为文件名可能不在响应头中)
1.调用Invoke-WebRequest来获取结果。然后你可以检查结果来查看头中的内容。
1.从响应头中获取文件名(这可能在Headers.Location或其他地方。当我运行对正在进行故障排除的URL的查询时,我在Headers[“Content-Disposition”]中找到了它,它看起来像
inline; filename="zzzz.docx"
1.根据名称创建一个新文件,并将内容写入此文件
下面是代码示例:
bjp0bcyl3#
多亏了Ryan,我有了一个半可用的功能:
一个图形文件和XML文件,我已经能够下载。当我试图下载这个网页,并打开它与边缘,它会工作的时候。
vuktfyat4#
我把这些放在一起是基于一些来源;有很多方法可以解析
Content-Disposition
头,所以使用任何适合你的方法。初始调用:
头解析:
* 备选项:*
写文件:
清理:
c9qzyr3d5#
powershell.exe Invoke-WebRequest -Uri serverIP/file.exe -OutFile C:\Users\file.exe