powershell 在for-each循环中有条件地格式化字符串

yftpprvb  于 2023-06-23  发布在  Shell
关注(0)|答案(1)|浏览(88)

这是我的剧本:
我有一个API,我通过PowerShell调用,有效载荷是一个JSON文件,这个API需要多次调用,每次,有效载荷略有不同(想想向列表中添加项目)。
下面是一个JSON模板的例子。

$JSONpaylod = @"
{
  "Config":
  {
  "address": $variable1,
  "authPassword": $variable2,
  "authUsername": $variable3}
}
"@

因为它需要多次执行,所以我将使用For-Each循环,例如:

For-each($_.item in $list){
Do things, then call the API}

然而,我遇到的问题是,基于$list中的当前项,我想根据查找更新$variable1、$variable2等。
在PowerShell中有没有一种优雅的方法来做到这一点?一个想法是,在我的哈希表$list中,让它像这样:

Item, var1, var2, var3  
1, 23, 1111, admin  
2, 10, 1234, admin

但如果我们把它放在一个

$variable1 = $_.var1 etc.

有没有更好的办法,还是我想太多了?

cczfrluj

cczfrluj1#

我建议你使用CSV作为输入,并构造遵循Json有效负载结构的对象,然后从那里你可以使用ConvertTo-Json将它们转换为Json字符串。这样做的好处是ConvertTo-Json处理必须在Json字符串中转义的字符的转义,即"\/等。

$csv = @'
var1, var2, var3
23, 1111, admin
10, 1234, admin
'@ | ConvertFrom-Csv

foreach($item in $csv) {
    $payload = [pscustomobject]@{
        Config = [pscustomobject]@{
            address      = $item.var1
            authPassword = $item.var2
            authUsername = $item.var3
        }
    } | ConvertTo-Json

    # do stuff with payload
}

例如,下面的函数将在"插值的位置(第3行,位置20)失败。
从JSON转换失败,出现错误:分析值后,遇到意外字符:B.路径“配置地址”,第3行,位置20。

$item = 'foo"bar'

@"
{
  "Config": {
    "address": "$item"
  }
}
"@ | ConvertFrom-Json

这将工作:

[pscustomobject]@{
    Config = [pscustomobject]@{
        address = 'foo"bar'
    }
} | ConvertTo-Json | ConvertFrom-Json

相关问题