Powershell 数组基于另一列求和

Powershell 数组基于另一列求和

我有一个从 SQL 查询中检索到的自定义对象,如下所示

这基本上就是我构建对象的方式,它运行良好,但我似乎找不到如何对它们进行分组。

foreach ($row in $result) {
$props = @{ 'MailboxName' = $row.MailboxName
            'PSTsFound' = $row.PSTsFound
            'Messagesremaining' = $row.Messagesremaining
          }
          $obj = New-Object -TypeName PSObject -Property $props
          $userPSTs += $obj
}

列 1 列 2

用户1 3

用户1 6

用户1 8

用户2 10

用户2 3

用户3 4

用户4 6

用户4 2

我想把它变成这样

列 1 列 2

用户1 17

用户2 13

用户3 4

用户4 8

因此基本上将列 1 匹配的列 2 相加。

提前感谢任何帮助

答案1

我认为你的意思Column1Column2MailboxNamePSTsFound

如果您只对具有相同 MailboxName 的所有行的 PSTsFound 总和感兴趣,而不是对单个行感兴趣,则可以使用以 MailboxName 为键、以整个对象为值的 HashTable。然后在迭代中,测试您的 HashTable 是否已包含给定的键 - 如果是,则将值添加到现有条目:

$SumTable = @{}

foreach ($row in $result) {
    if($SumTable.ContainsKey($row.MailboxName))
    {
        $obj = $SumTable[$row.MailboxName]
        $obj.PSTsFound += $row.PSTsFound
        $obj.Messagesremaining += $row.Messagesremaining
        $SumTable[$row.MailboxName] = $obj
    }
    else
    {
        $props = @{
            'MailboxName' = $row.MailboxName
            'PSTsFound' = $row.PSTsFound
            'Messagesremaining' = $row.Messagesremaining
        }
        $obj = New-Object -TypeName PSObject -Property $props
        $SumTable.Add($obj.MailboxName,$obj)
    }
}

$userPSTs = $SumTable.Values

如果你不想修改现有的集合,而只是想输出总和,你可以利用群组对象测量对象中的 cmdletStackOverflow 上建议的这个绝妙方法

$userPSTs | Group-Object -Property MailboxName | Foreach-Object {
    New-Object PSObject -Property @{
        MailboxName = $_.MailboxName
        PSTsFound = ($_.Group | Measure-Object -Property PSTsFound -Sum).Sum
        Messagesremaining = ($_.Group | Measure-Object -Property Messagesremaining -Sum).Sum
    }
}

相关内容