我正在使用powershell脚本生成一个配置文件,其中包含数据库密码等内容,这个脚本的正常用途是生成并使用密码,但有一瞬间,我需要访问一个开发伙伴的数据库,所以我需要将密码传递给powershell脚本。
问题是密码是乱码,包括&号、分号和大括号,我如何将其传递到powershell的命令行调用中呢?(This answer和其他答案很有帮助,但对分号和大括号没有帮助。)
以下是我的尝试:
powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3
结果:错误消息:不允许使用"与"号(&)字符。&运算符保留供将来使用;用双引号("&")括起"&"符号,将其作为字符串的一部分传递。
powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
结果:对$password执行write-host只会给出分号之前的字符串,而且,-otherparam具有默认值,而不是我传递给命令行的值。
powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
结果:write-host $password现在打印到引号前的第一个反勾号。是的,它输出反勾号,这似乎表明所有解析都是错误的。哦,脚本中调用的另一个函数抛出了一个我以前从未见过的异常(使用"4"个参数调用"AcquireToken"的异常:"身份验证已取消:user canceled authentication "),这表明param解析是以一种全新的、令人着迷的方式完成的。下面是write-host $password生成的结果:
xxx<xxxx;xxxxx`
powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
结果:write-host $password现在打印到引号前的第一个反勾号,第二个参数处于默认状态(也就是说,与上次的结果相同)。从好的方面来说,上一个示例中抛出的异常没有出现。
- 那么,如何从Windows命令行将任意ASCII字符串传递给powershell字符串参数呢?或者至少,如何转义分号、与号和大括号呢?**
3条答案
按热度按时间klh5stk11#
给你
"
双引号将转义所有cmd
有害字符,例如<
、&
等,"
本身和%
百分号(如果启用了delayed expansion,则为!
感叹号)除外,而'
撇号(单引号)将转义所有powershell
一('
撇号本身除外)。但是,上面提到的异常也可以转义...基于 Escape characters,Delimiters and Quotes 条目:
cmd
and batch-file中llmtgqce2#
我使用powershell脚本运行
firebase
,我使用三个双引号解决了这个问题,如下所示:firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage"""
。URL在$releaseMessage
中,并且“与”符号不再导致问题。apeeds0o3#
我在传递一个SAS令牌时遇到了同样的问题,该令牌由一个带有&号查询字符串的GET URI组成。
"""$sas"""
对我很有效-见下文