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

Pot*_*eer 18 parameters powershell cmd

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

问题是密码是乱码,包括&符号,分号和花括号.我怎样才能将它传递给powershell的命令行调用?(这个答案另一个答案是有帮助的,但对分号和花括号没有帮助.)

这是我尝试过的:

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

结果:错误消息:不允许使用&符号.&运营商留作将来使用; 用双引号("&")包装&符号以将其作为字符串的一部分传递.

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

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

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

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

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*efZ 22

powershell .\makeConfig.ps1 -password "'xxx<xxxx;xxxxx&x.xxxx}xx/xxx'" -otherparam 3
Run Code Online (Sandbox Code Playgroud)

这里

  • 外部"双引号将逃脱所有cmd有毒字符,例如<,&除了"自身和%百分号(以及启用延迟扩展时的!感叹号),同时
  • '撇号(单引号)将逃避所有powershell('撇号本身除外).

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

  • 这对我不起作用。我试图将 heroku 配置设置为 mongo url,它有一个 &amp;。我不得不交换报价。所以对我来说,我必须做“‘废话’”,而不是‘“废话”。 (3认同)
  • @Akshay 尝试 `"""bl&amp;ah"""` 而不是 `"'bl&amp;ah'"`;收到的字符串(检查 `$args`)将变成 `"bl&amp;ah"` 而不是 `'bl&amp;ah'`。 (2认同)

Nox*_*xys 13

我正在firebase使用 powershell 脚本运行。我用三双引号这样解决了这个问题:firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage"""。URL 在 中$releaseMessage,和号不再引起问题。

  • 在尝试单引号,双引号,在&符号前面加上反引号,并像接受的答案一样将它们混合之后,没有一个起作用。但是使用三重双引号是有效的! (2认同)