【问题标题】:Powershell, escaping specific character in string variable not present in regex escape methodPowershell,转义正则表达式转义方法中不存在的字符串变量中的特定字符
【发布时间】:2021-02-28 04:40:45
【问题描述】:

this post 我了解到我可以使用 [Regex]::Escape() 来转义字符串变量中的所有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 一起使用?

【问题讨论】:

  • 对于 URI/URL 项目,我认为你应该使用 ... Uri.EscapeUriString(String) Method (System) | Microsoft Docs — docs.microsoft.com/en-us/dotnet/api/…
  • 我早上先看看这个,看看它是否有效,非常感谢!
  • 不客气!祝你好运... [咧嘴一笑]
  • 我试过这个,似乎它剥离了字符的字符串而不是转义它们? Mathias 发布的答案似乎只是将 URL 修改为具有字符编码而不是空格和实际字符,所以我会尝试一下。如, [URI]::EscapeDataString("\\Server\Share\Something & Something") 变为 %5C%5CServer%5CShare%5CSomething%20%26%20Something ,因此看起来确实正确。编辑:更正,我一定做错了什么,你的建议确实给了我一个结果,但没有改变 & 所以它仍然被解释为 RestAPI 中的一个命令。
  • 看起来Mathias R. Jessen 为您找到了正确的版本。很高兴看到他的解决方案可以满足您的需要... [grin]

标签: powershell rest escaping


【解决方案1】:

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

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

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


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

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

【讨论】:

  • 不错的一个。很有帮助。
  • 这看起来很像我正在寻找的东西!将在实时环境中验证并回复您是否有效但只是尝试 [URI]::EscapeDataString("\\Server\Share\Something & Something") 给我 %5C%5CServer%5CShare%5CSomething%20%26% 20因此非常有希望!
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2010-09-21
相关资源
最近更新 更多