我正在将一些 bash 下载程序脚本转换为 PowerShell,并且使用Invoke-WebRequest
而不是curl
消除外部依赖性(因此 Windows 的 curl 不是一个选项)。
大多数 curl 选项可以通过 Invoke-WebRequest 复制,但我找不到复制以下行为的方法
curl -C - <url> -o <filename>
来自 curl 手册页:
-C, --continue-at <offset>
Continue/Resume a previous file transfer at the given offset.
The given offset is the exact number of bytes that will be skipped, counting
from the beginning of the source file before it is transferred to the destination.
If used with uploads, the FTP server command SIZE will not be used by curl.
Use "-C -" to tell curl to automatically find out where/how to resume the transfer.
It then uses the given output/input files to figure that out.
If this option is used several times, the last one will be used.
我确实检查过了Invoke-WebRequest 的文档但无法找到匹配的选项。
答案1
我也在使用 PowerShell,同样也喜欢 curl 的-C -
选项。经过一番研究,我发现这比我想象的要简单……
解决方案 1:PowerShell:-Resume 开关
Invoke-WebRequest
有一个-Resume
参数的作用与 curl 非常相似-C -
- 有关更多信息,
-Resume
请参阅:调用-webrequest-resume - 注 1:是在 PowerShell 6.1 中引入的(因此您需要使用
pwsh.exe
而不是powershell.exe
) - 注 2:需要
-OutFile
参数
解决方案 2:Windows 中的 curl
我理解 OP 不想依赖外部 CLI/依赖项,但如果使用 PowerShell 6.1+ 不是一个选择,请注意......
curl
现已包含在 Windows 中,并且默认为 Windows 10/11 的一部分- 更多信息请参阅:Microsoft 提供的 curl