powershell 转义并保留命令行中参数内的双引号

y3bcpkx1  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(130)

我正在使用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中,它抛出“〉was unexpected at this time”,而在powershell中,它一直等待更多的参数。主要目的是将其转换为一个C#脚本,该脚本迁移用户/组,但在使用cmd/powershell的测试阶段失败。是否有任何方法至少在C#中实现这一点?
我试过用“",^",“,”'”来转义双引号,但似乎没有任何效果。我也试过将值赋给一个变量,并在powershell中使用该变量。使用“”(如Escaping special characters in cmd中所建议的)是唯一一次运行该命令,但它仍然抛出以下错误。
错误:无法迁移组。无法绑定到容器“ParentOU/TEST!@#$%^&()+{}”|:〈〉?[];',./ /intraforest:yes'。无法获取“A.COM/ParentOU/TEST!@#$%^&;”的可分辨名称。()+{}|:〈〉?[];',./ /目录林内:是'.提示:参数不正确。(0x 80070057)
如果我创建另一个具有相同名称(双引号除外)的OU,同样的操作也会起作用。
请帮助解决此问题。

j8ag8udp

j8ag8udp1#

你可以用不同的方法来解决它:
转义引号外带有插入符号的字符

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

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

相关问题