如何在命令行powershell params中转换&符号,分号和花括号?

时间:2016-03-21 22:25:43

标签: powershell parameters cmd

我正在使用powershell脚本生成包含数据库密码等的配置文件。这个脚本的正常用法是生成并使用密码,但是稍等片刻,我需要访问其他开发人员的数据库,所以我需要将密码传递给powershell脚本。

问题是密码是乱码,包括&符号,分号和花括号。我怎样才能将它传递给powershell的命令行调用? (This answer和此other answer很有帮助,但对分号和大括号没有帮助。)

这是我尝试过的:

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3

结果:错误消息:不允许使用&符(&amp;)字符。 &amp;运营商留作将来使用;用一个&符号括起来 引号(“&amp;”)将其作为字符串的一部分传递。

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

结果:执行$ password的写主机只会将字符串赋予分号。另外,-otherparam有默认值,而不是我传入命令行的值。

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

结果:write-host $ password现在打印到报价前的第一个反引号。是的,它会输出反引号,这似乎表明一切都在解析所有错误。哦,脚本中调用的其他函数之一引发了一个我以前没见过的异常​​(异常调用带有“4”参数的“AcquireToken”:“authentication_canceled:用户取消认证”),这表明该参数解析完全以一种新的迷人方式进行了解析。这是写主机$密码产生的:

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

结果:write-host $ password现在打印到报价前的第一个反引号。第二个参数处于默认状态。 (即与上次相同的结果。)在正面,上一个例子中抛出的异常没有出现。

那么如何从Windows命令行将任意ASCII字符串传递给powershell字符串参数?或者至少,我如何逃脱分号,&符号和花括号?

2 个答案:

答案 0 :(得分:19)

powershell .\makeConfig.ps1 -password "'xxx<xxxx;xxxxx&x.xxxx}xx/xxx'" -otherparam 3

下面

  • 外部"双引号将转义所有cmd个有毒字符,例如<&等除了"本身和%百分号(!感叹号如果启用了delayed expansion
  • 内部'撇号(单引号)将转义所有powershell个('撇号本身除外)。

但是,上面提到的异常也可能被转义...... 基于 Escape字符,分隔符和引号文章:

答案 1 :(得分:8)

我正在使用Powershell脚本运行firebase。我使用如下三重双引号解决了这个问题:firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage"""。该网址位于$releaseMessage中,并且“&”号不再引起问题