Powershell,转义正则表达式转义方法中不存在的字符串变量中的特定字符

Mag*_*ism 3 rest powershell escaping

这篇文章中我了解到我可以使用 [Regex]::Escape() 来转义字符串变量中所有常见的转义字符。问题是我将使用包含 & 字符的路径,然后在 URL 中使用该路径进行 RestAPI 调用,并且该转义方法不会转义 & 字符。

当路径包含 & 时,API 会将其解释为 URL 中的运算符并且无法正确解析:

$MyPath = "\\Server\Share\Something & Something Else"
$MyURL= "http://localhost/Address/to/APIResource/"
Invoke-RestMethod -Method Get -Uri ("$MyURL" + "?path=$MyPath") -UseDefaultCredentials
Run Code Online (Sandbox Code Playgroud)

?path=$MyPath 是问题所在,因为 $MyPath 包含 & 因此不起作用。如何转义 $MyPath 中的 & 字符以使其与 RestAPI 一起使用?

Mat*_*sen 6

我了解到我可以用来[Regex]::Escape()转义字符串变量中所有常见的转义字符

现在你会发现这根本不是真的:)

[regex]::Escape() 转义那些可能被解释为.NET 正则表达式语法定义的转义序列的字符- 它是为该上下文而设计的,并且仅保证在该上下文中工作。


对于 URI 参数,您需要使用[uri]::EscapeDataString()

Invoke-RestMethod -Uri ("$MyURL" + [uri]::EscapeDataString("?path=$MyPath")) ...
Run Code Online (Sandbox Code Playgroud)