【发布时间】:2016-07-08 15:43:36
【问题描述】:
我正在使用一个 powershell 脚本来生成一个包含数据库密码等的配置文件。该脚本的正常使用是生成并使用密码,但是一时之间,我需要访问一个开发人员的数据库,所以我需要将密码传递给 powershell 脚本。
问题在于密码是乱码,包括与号、分号和花括号。如何将其传递给 powershell 的命令行调用? (This answer 和这个 other 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 的写入主机只会将字符串提供到分号。另外,-otherparam 有它的默认值,而不是我传入命令行的值。
powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
结果:write-host $password 现在打印到引号前的第一个反引号。是的,它输出了反引号,这似乎表明一切都在解析错误。哦,脚本中调用的其他函数之一引发了我以前从未见过的异常(使用“4”参数调用“AcquireToken”的异常:“authentication_canceled:用户取消身份验证”),这表明参数解析完全以一种新的和迷人的方式进行。下面是 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 字符串参数?或者至少,我如何转义分号、& 和花括号?
【问题讨论】:
标签: powershell parameters cmd