【问题标题】:Escape and preserve double quotes inside parameter in command line在命令行中转义并保留参数内的双引号
【发布时间】:2022-12-16 11:29:45
【问题描述】:

我正在使用 ADMT 命令行测试组迁移,但是当 OU 名称包含双引号时,迁移在特定情况下失败。

ADMT GROUP /n "TestGroup" /sd:Child.A.COM /sdc.CHILD.A.COM /td.COM /tdc.A.COM /to:"ParentOU/TEST!@#$%^&*()_+{}|:"<>?[]\;',./" /intraforest:yes

在 cmd 中,这抛出“> 此时是意外的”,在 powershell 中,它一直在等待更多参数。主要目的是将其转换为迁移用户/组的 c# 脚本,但在使用 cmd/powershell 的测试阶段失败。有没有办法至少在 C# 中实现这一点?

我尝试用“”、^”、“、`”转义双引号,但似乎没有任何效果。我还尝试将值分配给变量并在 powershell 中使用该变量。使用“”(如 this @ 中所建议的那样) 987654321@) 是命令运行的唯一一次,但它仍然抛出以下错误。

错误:无法迁移组。无法绑定到容器 'ParentOU/TEST!@#$%^&()+{}|:<>?[];',./ /intraforest:yes'。不能 获得专有名称 'A.COM/ParentOU/TEST!@#$%^&;()+{}|:<>?[];',./ /intraforest:yes'。 : 参数不正确。 (0x80070057)

如果我创建另一个具有相同名称但双引号除外的 OU,则同样有效。

请帮助解决这个问题。

【问题讨论】:

标签: powershell cmd active-directory


【解决方案1】:

你可以用不同的方式解决它:

在引号外用插入符号转义字符

setlocal EnableDelayedExpansion
set "to_param=ParentOU/TEST^!@#$%^&*()_+{}|:"^^^^^<^^^^^>?[];',./"
call ADMT GROUP /to:"%%to_param%%"

主要问题是 ADMT 程序,您需要知道它如何解析参数,特别是关于它如何转义参数内的引号的规则。
你可以在set "to_param=ParentOU..."^^^^^&lt;^^^^^&gt;?[];',./"中测试"

【讨论】:

  • 不幸的是,这仍然会抛出 '> was unexpected at this time' 错误。在设置“to_param”命令后,我确实尝试过“之前,甚至在你的建议下它抛出'>此时意外'错误。我将尝试收集有关 ADMT 如何解析参数的更多信息。谢谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2011-10-06
  • 2011-04-19
相关资源
最近更新 更多