如何在PowerShell中解析Terraform输出的非标准类JSON结构
解析方法
方法1:原生表达式解析(最便捷)
你拿到的@{key=value; ...}结构本身就是PowerShell原生的哈希表字面量格式,输入来源可控的场景下直接执行表达式即可得到结构化对象:
# 假设原始参数字符串存储在$rawParam变量中 $parameters = Invoke-Expression $rawParam # 调用示例:$parameters.x 即可获取对应值value1
注意:仅在输入来源可信(此处为Terraform传入的固定参数)时使用该方法,避免不可信输入带来的注入风险。
方法2:转标准JSON解析(更安全)
如果需要规避表达式执行风险,可以通过字符串替换将其转为标准JSON格式后解析:
$rawParam = '@{x=value1; y=value2; z=value3}' # 按规则替换为标准JSON格式 $jsonContent = $rawParam ` -replace '^@\{', '{' ` -replace '(\w+)=([^;}]+)', '"$1":"$2"' ` -replace ';', ',' $parameters = ConvertFrom-Json $jsonContent
跨平台兼容根因修复
你遇到的Windows运行正常、Linux异常的问题,本质是没有遵循Terraform external数据源的参数读取规范。Terraform的external数据源会将query参数序列化为JSON传入程序的标准输入,而非命令行参数,使用如下写法可实现跨平台兼容,无需额外解析特殊格式:
# 从标准输入读取Terraform传入的原生JSON参数 $rawInput = [Console]::In.ReadToEnd() $parameters = ConvertFrom-Json $rawInput
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

