【问题标题】:EscapeDataString having differing behaviour between Powershell IDE and Powershell consoleEscapeDataString 在 Powershell IDE 和 Powershell 控制台之间具有不同的行为
【发布时间】:2017-01-31 13:52:23
【问题描述】:

我对这个问题有点困惑!我正在构建一个更大的脚本,它可以在 ISE 中运行,但不能在 powershell 控制台中运行。我设法将其追踪到 [System.Uri]::EscapeDataString 函数,该函数似乎在不同环境之间表现不同,例如在我的 powershell 控制台 () ' & !没有被转义,而在 IDE 中它们都被转义了。

我错过了什么吗?

我的测试代码:

[System.Uri]::EscapeDataString("/?:@%!$&'/*+,;=()")

ISE 输出:

%2F%3F%3A%40%25%21%24%26%27%2F%2A%2B%2C%3B%3D%28%29

Powershell 控制台输出:

%2F%3F%3A%40%25!%24%26'%2F*%2B%2C%3B%3D()

谢谢!

【问题讨论】:

  • 你的 PowerShell 版本是什么。好奇地检查两个外壳,以确保您的快捷方式上没有使用开关。 可能这是一个错误,但需要确定版本。
  • 可在 Windows 10 和 Windows 7 上的 PowerShell 5 上重现。
  • @Matt 5.1.14393.693 在两个控制台上都一样
  • 这里有区别:[System.UriParser].GetField('s_QuirksVersion', [Reflection.BindingFlags] 'Static, NonPublic').GetValue($null).
  • @PetSerAl 很有趣,除非我遗漏了什么,否则我在任何地方都看不到这个 quirksversion 记录

标签: powershell escaping powershell-ise


【解决方案1】:

这里有区别,根据source:[System.UriParser].GetField('s_QuirksVersion', [Reflection.BindingFlags] 'Static, NonPublic').GetValue($null)

我将答案标记为社区 wiki,因为它出现在 cmets 中,导致该问题出现在搜索未回答问题时。

【讨论】:

  • 有没有办法在 PowerShell 中将此设置为 V3? (或 ISE 中的 V2?)一些一致性可以挽救我几天的生命。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2021-11-16
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多