如何在 url 中使用带括号的 Invoke-Webrequest?

How is it possible to use Invoke-Webrequest with some parentheses in the url?

我在使用 Powershell 的 Invoke-Webrequest 功能时遇到问题。我知道如何使用它,但有些文件的文件名中有括号。这是 .ps1 文件的代码:

Invoke-Webrequest http://FreeZipFiles.com/FreeZipFile.zip -Outfile C:\Users\MyUserName\Desktop\test.zip

注意 FreeZipFiles.com 是 虚构的。 当我 运行 代码时,我得到这个错误:

FREE! : The term 'FREE!' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:76
+ ...  http://FreeZipFiles.com/FreeZipFile (FREE!). ...
+                                                               ~~~
    + CategoryInfo          : ObjectNotFound: (FREE!:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

看了这个之后,我意识到括号表示“这是一个命令,运行它”,但它不是! 无论如何,提前致谢!

您的示例代码将 URL 显示为 http://FreeZipFiles.com/FreeZipFile.zip 但根据您的示例错误消息,我怀疑您遗漏了重要的部分,即 URL 具有其中有一个 space,类似于 http://FreeZipFiles.com/FreeZipFile.zip (FREE!).

在那种情况下,您应该确保引用 URL:

Invoke-WebRequest 'http://FreeZipFiles.com/FreeZipFile.zip (FREE!)' -Outfile C:\Users\MyUserName\Desktop\test.zip

第一种方法失败的原因是用作参数的未加引号的值被解释为字符串,但是由于 spaces 将参数和参数分开,因此您必须注意确保 spaces得到正确处理。通常这是通过引用完成的。

你也可以使用双引号,但是双引号可以扩展某些特殊字符。例如,如果您这样做:

Invoke-Webrequest "http://FreeZipFiles.com/$HOST/FreeZipFile.zip" -Outfile C:\Users\MyUserName\Desktop\test.zip

您可能会惊讶地发现 $HOST 最终会采用 PowerShell 中 $Host 变量的值,而不是字面意义。单引号不会那样解释变量。

从技术上讲,您可以使用反引号 ` 对 space 进行转义,这是 PowerShell 中的转义字符,但是您还必须对括号本身进行转义:

Invoke-Webrequest http://FreeZipFiles.com/FreeZipFile.zip` `(FREE!`) -Outfile C:\Users\MyUserName\Desktop\test.zip

显然这并不理想,我添加它更多是出于好奇。