我有一个从 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
我认为你的意思Column1
是Column2
MailboxName
PSTsFound
如果您只对具有相同 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
}
}