PowerShell处理CSV按Direction统计Inbound和Outbound的MessageCount总和
PowerShell 处理CSV统计邮件数量解决方案
基础实现(适配新手易理解的foreach逻辑)
你之前foreach输出不符合预期,90%的概率是没有将MessageCount字段从字符串转换为数值类型,CSV导入后所有字段默认是字符串格式,直接累加会触发字符串拼接而非数值求和。
完整可运行代码:
# 替换为你本地CSV的实际路径 $csv = Import-Csv -Path "C:\path\to\your\file.csv" # 提取统一的邮箱地址(你提到Name字段全部相同) $mailAddr = $csv[0].Name # 初始化统计变量 $inboundTotal = 0 $outboundTotal = 0 # 遍历累加 foreach ($item in $csv) { $count = [int]$item.MessageCount if ($item.Direction -eq 'Inbound') { $inboundTotal += $count } elseif ($item.Direction -eq 'Outbound') { $outboundTotal += $count } } # 输出关联邮箱的最终结果 [PSCustomObject]@{ 邮箱地址 = $mailAddr Inbound总和 = $inboundTotal Outbound总和 = $outboundTotal }
简化写法(用内置命令省略手动判断逻辑)
如果不想自己写循环判断,可直接用Group-Object和Measure-Object实现统计:
$csv = Import-Csv -Path "C:\path\to\your\file.csv" $groups = $csv | Group-Object Direction -AsHashTable [PSCustomObject]@{ 邮箱地址 = $csv[0].Name Inbound总和 = ($groups['Inbound'].MessageCount | ForEach-Object { [int]$_ } | Measure-Object -Sum).Sum Outbound总和 = ($groups['Outbound'].MessageCount | ForEach-Object { [int]$_ } | Measure-Object -Sum).Sum }
内容的提问来源于stack exchange,提问作者Niquuu
相关产品推荐
相关产品推荐

