【问题标题】:Create a dynamic ReST request body in PowerShell在 PowerShell 中创建动态 ReST 请求正文
【发布时间】:2016-03-16 14:13:38
【问题描述】:

我目前正在研究在 PowerShell 中调用 ReST 请求的用例。 POST 请求的主体是动态创建的,从 CSV 文件中读取数据。

这是我的最终请求正文应该是这样的

{
            "@type": "mtTaskParameter",
            "name": "$src_sfdc$",
            "type": "EXTENDED_SOURCE",
            "sourceConnectionId":"00002E0B00000000000C"
        },
        {
            "@type": "mtTaskParameter",
            "name": "$tgt_db_del$",
            "type": "TARGET",
            "targetConnectionId":"00002E0B00000000000D"
        },
        {
            "@type": "mtTaskParameter",
            "name": "$tgt_db_ups$",
            "type": "TARGET",
            "targetConnectionId":"00002E0B00000000000D"
        },
        {
            "@type": "mtTaskParameter",
            "name": "$tgt_status$",
            "type": "TARGET",
            "targetConnectionId":"00002E0B00000000000D"
        }
}

目前我已经实现如下

if($connectionParameterized -eq "true"){

        $str = @"
        "@type": "mtTaskParameter",
        "name": "$name",
        "type": "$type"
"@

        if($type -eq "SOURCE"){

        $sourceConnectionId = <get source id>

        $str = $str+
        @"
            ,"sourceConnectionId":"$sourceConnectionId"
"@
        }

        if($type -eq "TARGET"){

        $targetConnectionId = <get target id>

        $str = $str+
        @"
        ,"targetConnectionId":"$targetConnectionId"
"@
        }
$finalstr = $finalstr+@"
     {
     $str
     },
"@
}

这很好用,但是代码变得非常混乱且难以扩展。同样在打印时,格式不正确。

有没有更好的方法来处理这个问题?

注意:从示例中可以看出,请求正文包含几个特殊字符,如@、$ 等。

【问题讨论】:

    标签: rest powershell powershell-5.0


    【解决方案1】:

    如果您包含 CSV,这会更容易,但基本上,您可以将 CSV 作为对象数组导入,然后将其转换为 JSON。

    您可以通过添加自定义成员来自定义通过导入 CSV 创建的对象,以便转换为 JSON 为您提供所需的输出。

    您还可以对对象数组进行分组或过滤,以根据特定条件制作不同的对象。

    这里有一些示例代码,可能无法直接工作,但应该在一定程度上展示了这个概念:

    $json = Import-Csv -Path C:\my\data.csv |
        ForEach-Object -Process {
            $row = $_
            $propName = $row.Type.ToLower() + 'ConnectionId'
            $row | Add-Member -NotePropertyName $propName -NotePropertyValue $out["$mapping_name"].$name -Force -PassThru
        } |
        ConvertTo-Json
    

    【讨论】:

    • 你能举一个例子来证明这一点吗?
    • @AnsgarWiechers 如果我知道属性的名称应该是什么,我可能也会这样做;如果将 CSV 数据添加到问题中,我可能会更改它。但我不喜欢计算项语法的混乱,所以我更喜欢Add-Member,但这完全取决于我的情况。
    • @live2learn 编辑您的问题以包含 CSV 样本,并可能添加更多代码(例如,我们不知道 $out["$mapping_name"].$name 指的是什么)。从那里开始,写答案要容易得多。
    • @briantist 非常感谢您的回复。 csv 文件在这里没有多大帮助,因为值不是直接从 csv 获取的。将 csv 值与另一个 ReST 响应进行比较,然后获取这些值。我在这里的查询基本上是为了了解如何以更好的方式动态添加身体的一部分。
    • @AnsgarWiechers 我不打算这样生成属性名称。将计算属性值并添加 name:property。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2019-09-21
    • 2017-03-08
    相关资源
    最近更新 更多