【问题标题】:How to pass options as a map?如何将选项作为地图传递?
【发布时间】:2020-11-06 01:00:57
【问题描述】:

我遇到了这个 bash 脚本,我需要在 PowerShell 中做同样的事情。

vault write ssh-client-signer/roles/my-role -<<"EOH"
{
  "allow_user_certificates": true,
  "allowed_users": "*",
  "default_extensions": [
    {
      "permit-pty": ""
    }
  ],
  "key_type": "ca",
  "default_user": "ubuntu",
  "ttl": "30m0s"
}
EOH

我尝试使用这样的多行字符串:

vault write ssh-client-signer/roles/my-role -@"
{
  "allow_user_certificates": true,
  "allowed_users": "*",
  "default_extensions": [
    {
      "permit-pty": ""
    }
  ],
  "key_type": "ca",
  "default_user": "ubuntu",
  "ttl": "30m0s"
}
"@

但是该命令没有正确解析选项。

Failed to parse K=V data: invalid key/value pair "-@\n{\n  allow_user_certificates: true,\n  allowed_users: *,\n  default_extensions: [\n    {\n      permit-pty: \n": format must be key=value

我找到了一种使用 PowerShell 运行命令的方法,方法是让 vault 从 JSON 文件中读取选项。

vault write ssh/roles/my-role "@my-role.json";

但这并不能回答最初的问题。

【问题讨论】:

  • 您是否尝试过将此处的字符串传递给vault@'...&lt;extra newline at the bottom&gt;'@ | &amp; vault write ssh-client-signer/roles/my-role -
  • 你能解释一下你的意思是“没有正确解析选项”吗?你得到什么错误?
  • 我将帖子编辑为加载项错误

标签: powershell hashicorp-vault powershell-core


【解决方案1】:

这是 echoargs 的输出。这种方式似乎行不通。

echoargs -@"
{
  "allow_user_certificates": true,
  "allowed_users": "*",
  "default_extensions": [
    {
      "permit-pty": ""
    }
  ],
  "key_type": "ca",
  "default_user": "ubuntu",
  "ttl": "30m0s"
}
"@


Arg 0 is <-@
{
  allow_user_certificates: true,
  allowed_users: *,
  default_extensions: [
    {
      permit-pty:
>
Arg 1 is <}
>
Arg 2 is <],
>
Arg 3 is <key_type:>
Arg 4 is <ca,
>
Arg 5 is <default_user:>
Arg 6 is <ubuntu,
>
Arg 7 is <ttl:>
Arg 8 is <30m0s
}
@>

如果你想解决这个问题,你可能必须反斜杠所有的引号。如果您无法通过管道将 json 传递给它。

$myarg = @"
{
  "allow_user_certificates": true,
  "allowed_users": "*",
  "default_extensions": [
    {
      "permit-pty": ""
    }
  ],
  "key_type": "ca",
  "default_user": "ubuntu",
  "ttl": "30m0s"
}
"@ -replace '"','\"'


echoargs -$myarg

Arg 0 is <-{
  "allow_user_certificates": true,
  "allowed_users": "*",
  "default_extensions": [
    {
      "permit-pty": ""
    }
  ],
  "key_type": "ca",
  "default_user": "ubuntu",
  "ttl": "30m0s"
}>

【讨论】:

    【解决方案2】:

    您误解了 Bash 示例的工作原理,实际执行的命令是

    vault write ssh-client-signer/roles/my-role -
    

    - 是从标准输入读取值,&lt;&lt;"EOH" 是heredoc 的开始。

    对于 PowerShell 版本,您尝试使用 herestring(不同于 heredoc),但由于 -,它被解释为裸字符串。 由于 PowerShell 缺少输入重定向,因此等效命令可能是

    @"
    {
      "allow_user_certificates": true,
      "allowed_users": "*",
      "default_extensions": [
        {
          "permit-pty": ""
        }
      ],
      "key_type": "ca",
      "default_user": "ubuntu",
      "ttl": "30m0s"
    }
    "@ | vault write ssh-client-signer/roles/my-role -
    

    根据 Vault 处理数据的方式,也可以直接将其作为参数传递

    vault write ssh-client-signer/roles/my-role @"
    {
      "allow_user_certificates": true,
      "allowed_users": "*",
      "default_extensions": [
        {
          "permit-pty": ""
        }
      ],
      "key_type": "ca",
      "default_user": "ubuntu",
      "ttl": "30m0s"
    }
    "@
    

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多