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



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

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

$MyPath = "\ServerShareSomething & Something Else"
$MyURL= "http://localhost/Address/to/APIResource/"
Invoke-RestMethod -Method Get -Uri ("$MyURL" + "?path=$MyPath") -UseDefaultCredentials

?path=$MyPath是个问题,因为$MyPath包含&因此将不起作用。我该如何逃离&$MyPath中的字符,使其与RestAPI一起工作?

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

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

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


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

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

最新更新