如何遍历pscutomobject数组并添加额外的属性?

时间:2019-08-21 19:36:43

标签: powershell

假设我有以下pscutomobject数组脚本

$pscoArray = @()

foreach($server in $Servers) {
    $pscoArray += [PSCustomObject]@{
        Server = $server
    }
}                   

$iteration = 0

如何遍历生成的$ pscoArray并添加一个名为“ iteration”的新成员,并根据数组中已存在的对象数对其进行递增?

$pscoArray = $pscoArray | %{ Add-Member -MemberType NoteProperty -Name 'iteration' -Value $iteration; 'iteration' = $iteration++}

假设此示例中有3台服务器,最终输出应如下所示

iteration Server
------    ------
1         server1
2         server2
3         server3

因此必须将迭代作为成员添加到pscustomobject的开始位置0处,尽管我也不知道该怎么做

p.s。我知道我可以直接在forloop中添加迭代,但是出于其他目的,我需要这样做。

1 个答案:

答案 0 :(得分:2)

如果这是生成数组的代码

Error importing: Error: "Loading chunk 0 failed.

那么最简单的方法可能是使用for(..)循环

$Servers = 'svr1', 'svr2', 'svr3'
$pscoArray = foreach($server in $Servers) {
    [PSCustomObject]@{
        Server = $server
    }
}

输出:

# add a new property called "iteration" to each member of the array
for ($i = 0; $i -lt $pscoArray.Count; $i++) {
    $pscoArray[$i] | Add-Member -MemberType NoteProperty -Name 'iteration' -Value ($i + 1)
}

$pscoArray


更新

如果要首先列出迭代属性,可以执行以下操作:

Server iteration
------ ---------
svr1           1
svr2           2
svr3           3

输出:

# add a new property called "iteration" as first property to each member of the array
for ($i = 0; $i -lt $pscoArray.Count; $i++) {
    $pscoArray[$i] = $pscoArray[$i] | Select-Object @{Name = 'iteration'; Expression = {$i + 1}}, *
}

$pscoArray