关于如何使用 PowerShell 下载文件,存在一些问题。我正在使用 PowerShell Core,因此我无法再使用我最喜欢的方法:Start-BitsTransfer
。
我看到这个推荐:
Invoke-WebRequest URL -OutFile c:\file.ext
但是,必须提供文件名似乎不太理想。 PowerShell/iwr
可以根据 URL 路径或响应 header 猜测文件名吗?
我单独尝试了Invoke-WebRequest URL
,但这根本不存储文件。来自阅读the docs看起来可能没有选择,对吗? PowerShell 中是否有不同的单行代码可以使用原始文件名下载文件?
最佳答案
没有 Invoke-WebRequest
的开关。但是,以下代码可以在一行中从文件路径中提取名称:
Invoke-WebRequest $URL -OutFile "C:\$(Split-Path -Leaf $URL)"
Split-Path
将采用路径并返回父容器的完整路径 -Parent
参数,或末尾带有 -Leaf
的文件/目录的名称论证。
但是,只有当文件名是 URL 的一部分时,这才有效。例如,如果您有类似 http://server.domain.tld/download.php?id=12345
的内容,输出文件最终将是 download.php?id=12345
。这不是单行,而是@Theo shared an answer在他的评论中定义了一个函数来获取重定向的 URL。然后您可以使用Split-Path -Leaf
在该重定向的 URL 上获取所需的文件名。
关于使用 URL/ header 文件名下载 PowerShell Core 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59218767/