【问题标题】:PowerShell - Pass a variable within a variable that has quotes for JSONPowerShell - 在具有 JSON 引号的变量中传递一个变量
【发布时间】:2021-06-29 16:15:31
【问题描述】:

我正在开发 API 以在 QRadar 中创建租户。我有这个我正在使用的基本脚本,我之前遇到过基本相同的问题,但现在它变得更复杂了。

这是我正在使用的代码:

$QRadarIP = 'xxx.xxx.xxx.xxx'
$authtoken = 'blahblahblah'
$SECHeader = @(
"SEC: $authtoken"
)

$name = 'test4'
$description = 'The fourth test'

$TenantInput = @('{"deleted": false,"description": $description,"event_rate_limit": 0,"flow_rate_limit": 0,"name": $name}')

curl.exe -S -X POST -k -H $SECHeader -H 'Content-Type: application/json' -H 'Version: 15.1' -H 'Accept: application/json' --data-binary $TenantInput $tenantURI

所以我遇到的问题是 $name 和 $description 作为文字而不是变量的值传递。 $TenantInput 中的字符串是 JSON,这些引号显然对于解释 JSON 的方式是必需的。我正在尝试将该变量放在 @() 中,因为这是我用来解决将身份验证令牌传递到 SEC 标头然后传递到 curl 命令的问题。

我在这里查看了其他类似的问题,但总有一些与我的场景不同的地方,我无法破译。任何建议表示赞赏。

【问题讨论】:

    标签: json powershell api


    【解决方案1】:

    解决办法是:

    $TenantInput = @("{`"deleted`": false,`"description`": ${description},`"event_rate_limit`": 0,`"flow_rate_limit`": 0,`"name`": ${name}}")
    

    您需要使用双引号并在${}中定义变量

    要了解 String 中的引号,您可以阅读此博客(带有示例):https://www.computerperformance.co.uk/powershell/quotes/

    【讨论】:

    • {"http_response":{"code":422,"message":"请求格式正确,但由于语义错误无法执行"},"code":11, "description":"","details":{},"message":"无法转换内容类型为 \"APPLICATION_JSON\""} 的用户请求正文
    • 所以它没有将其注册为有效的 JSON 格式。我确实遵循了您提供的链接,这确实有很大帮助。当然,现在这让我开始了另一个探索,想弄清楚为什么 QRadar 不接受这种格式。
    • 所以我有点弄清楚您的解决方案的问题所在。通过让我将字符串放在适当的位置,您的解决方案肯定有效,但 JSON 希望该字符串值也被封装在引号中,因此我必须添加 " in front of and after the ${} so instead of ${description} I have "${description}`" 确实将字符串封装在引号之间.现在的问题是,当它被传递给 curl 语句时,它会在引号中分解字符串,并认为“第四次测试”中的“第四次”这个词实际上是我试图将请求发送到的 URI。
    • 尝试添加转义引号" : [...]"description": "${description}`",[...]
    【解决方案2】:

    所以@Damien 是对的,最终的解决方案归结为我在变量前面添加了那些反引号和引号,但也用下划线替换了我的空格,如下所示:

    $name6 = "test5"
    $description6 = "The_fifth_test"
    $TenantInput = @("{`"deleted`": false,`"description`": `"${description6}`",`"event_rate_limit`": 0,`"flow_rate_limit`": 0,`"name`": `"${name6}`"}")
    

    我必须在字符串中使用下划线,这绝对是一个遗憾,所以我确信还有比我最终停止使用的更好的答案。

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 2021-11-21
      • 2021-08-10
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多