powershell - 在 for-each 循环中对字符串进行条件格式化

标签 powershell for-loop variables

这是我的场景:

我有一个通过 Powershell 调用的 API,有效负载是一个 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.

是否有更好的方法来做到这一点,还是我想太多了?

最佳答案

我建议您使用 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)处失败。

Conversion from JSON failed with error: After parsing a value an unexpected character was encountered: b. Path 'Config.address', line 3, position 20.

$item = 'foo"bar'

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

这会起作用:

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

关于powershell - 在 for-each 循环中对字符串进行条件格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76369856/

相关文章:

python - 如何迭代此列表以创建矩阵?

variables - 如何在 Dockerfile 中定义变量?

c - C 中的 %g 和 %f 有什么区别?

powershell - 创建虚拟目录 exec 应用每个代理运行

windows - 如何在 PowerShell 中将位置与主文件夹进行比较

windows - 未找到 PowerShell 包管理

c - C 中的双 For 循环语法

php - 如何在相同的id但不同的列值下插入值?

c++ - 静态与成员变量

powershell - 从特定的XML字段中检索值