Powershell数组求和列基于另一个

我有一个自定义对象从一个SQL查询看起来像这样

这基本上是我如何构build对象,它工作正常,但我似乎无法find如何分组他们。

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

Column1 Column2

User1 3

User1 6

User1 8

用户2 10

User2 3

User3 4

User4 6

User4 2

我想把它变成这个

Column1 Column2

User1 17

用户2 13

User3 4

User4 8

所以基本上总结列1匹配的列2。

预先感谢您的帮助

我假设你由Column1Column2表示MailboxNamePSTsFound

如果您只是对具有相同MailboxName的所有行的PSTsFound总和感兴趣,而不是单个行,则可以使用HashTable和MailboxName作为键,并将整个对象作为值。 然后在你的迭代中,testing你的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 

如果您不想修改现有的集合,但只想输出总和,则可以在StackOverflow上build议的这种精彩的方法中使用Group-Object和Measure-Object cmdlet:

 $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 } }