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

Powershell, escaping specific character in string variable not present in regex escape method

来自 this post I learned that I can use [Regex]::Escape() to escape all the commonly escaped characters 中的字符串变量。问题是我将使用包含 & 字符的路径,然后在 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

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

一起使用

I learned that I can use [Regex]::Escape() to escape all the commonly escaped characters in string variables

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

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


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

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