我正在使用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字符串参数?或者至少,我如何逃脱分号,&符号和花括号?
答案 0 :(得分:19)
powershell .\makeConfig.ps1 -password "'xxx<xxxx;xxxxx&x.xxxx}xx/xxx'" -otherparam 3
下面
"
双引号将转义所有cmd
个有毒字符,例如<
,&
等除了"
本身和%
百分号(!
感叹号如果启用了delayed expansion)'
撇号(单引号)将转义所有powershell
个('
撇号本身除外)。但是,上面提到的异常也可能被转义...... 基于 Escape字符,分隔符和引号文章:
cmd
and batch-file 答案 1 :(得分:8)
我正在使用Powershell脚本运行firebase
。我使用如下三重双引号解决了这个问题:firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage"""
。该网址位于$releaseMessage
中,并且“&”号不再引起问题