当密码包含需要转义的字符时,通过 PS1 脚本中的“az postgress”连接到 Postgres 灵活服务器

问题描述 投票:0回答:1

我想通过 PS1 (PSCore) 脚本在 Azure Postgres 灵活服务器上运行命令。 密码可以包含诸如

<
)
之类的字符,PSCore 解析器会阻塞这些字符。

我正在尝试使用

az postgres flexible-server execute
命令。 我认为这更多的是 PS1 脚本问题,而不是 Postgres 或
az postgres
问题。

命令示例:

az postgres flexible-server execute -n the-instance-name -u theName -p the%WeIRDbutSecure#PasswordE<JMCiOw<>IQ) -d theDatabase -q "select * from MyTable"

我收到如下错误:

ParserError:
Line |
   1 |  … he-instance-name -u theName -p the%WeIRDbutSecure#PasswordE<JMCiOw<>IQ) -d theDatabase  …
     |                                                                          ~
     | Unexpected token ')' in expression or statement.

我尝试将

the%WeIRDbutSecure#PasswordE<JMCiOw<>IQ)
分配给局部变量。 这将问题转移到:

> was unexpected at this time.

我尝试将整个字符串放在双引号和单引号中。 两者都不起作用——同样的

> was unexpected at this time.
错误。 我还尝试在字符串中嵌入单个反引号字符,如下所示:

the%WeIRDbutSecure#PasswordE`<JMCiOw`<`>IQ`)

但继续出现相同的

> was unexpected at this time.
错误。

我的最终目标是将此命令行命令嵌入到稍后执行的 PS1 脚本中。

是否有人能够传递包含 PS1 想要在指令中解释的字符的

-p
密码? 您如何转义这些字符或整个密码?

postgresql powershell shell azure-cloud-shell
1个回答
0
投票

tl;博士

通过

cmd /c
致电解决问题。
here-string 用于更轻松地使用 embedded 引用:

cmd /c @"
az postgres flexible-server execute -n the-instance-name -u theName -p "the%WeIRDbutSecure#PasswordE<JMCiOw<>IQ)" -d theDatabase -q "select * from MyTable"
"@

  • 从根本上讲,与在任何 shell 中一样,您需要quote包含 shell 元字符的单词,例如

    )
    - 有关 "..."
    可扩展
    )和 '...'
    逐字
    )的详细信息,请参阅 about_Quoting_Rules字符串。

    • 因此,通常(参见下一点),您需要
      ... -p 'the%WeIRDbutSecure#PasswordE<JMCiOw<>IQ)' ...
  • 不幸的是,因为

    az
    是作为批处理文件实现的(az.cmd
    ),在这种情况下这
    不够(正如您所观察到的):

    • 在幕后,PowerShell(合理地)在构造进程命令行时会传递不包含空格的参数

      且不加引号,因此,即使您在 PowerShell 端正确引用了不含空格的参数,它也是如此仍将 unquoted 放在进程命令行上。

    • 这适用于 Windows 上的

      大多数 CLI,但不适用于 cmd.exe

      (批处理文件的解释器 (
      *.cmd
      , 
      *.bat
      )),它不恰当地将批处理文件的命令行解析为 
      如果它是从 inside a 提交的命令行 cmd.exe
       会议。

      • 因此,会出现不带引号的元字符,例如

        <

        |
         
        break 此类批处理文件调用。

      • GitHub 问题 #15143 是一项建议,旨在让 PowerShell 适应 cmd.exe

         的怪癖以及其他备受瞩目的 CLI;遗憾的是它无处可去。

© www.soinside.com 2019 - 2024. All rights reserved.