使用PowerShell计算CSV文件中各成本中心的许可证费用汇总
PowerShell按成本中心汇总M365许可证费用方案
假设你的原始CSV包含以下核心列:成本中心、许可证类型、单用户费用(如果列名不同,自行替换代码中的对应字段),以下是实现汇总的具体步骤和脚本:
核心实现脚本
# 1. 导入原始CSV文件,替换为实际文件路径 $rawData = Import-Csv -Path "C:\Accounting\M365_License_Costs.csv" # 2. 按「成本中心+许可证类型」分组,计算数量与总费用 $detailedSummary = $rawData | Group-Object -Property 成本中心,许可证类型 | ForEach-Object { [PSCustomObject]@{ 成本中心 = $_.Values[0] 许可证类型 = $_.Values[1] 总用户数量 = $_.Count 该类型总费用 = [math]::Round(($_.Group.'单用户费用' | Measure-Object -Sum).Sum, 2) } } # 3. (可选)生成按成本中心合并的汇总表(一行一个成本中心,列包含各许可证数据) $ccCombinedSummary = $detailedSummary | Group-Object -Property 成本中心 | ForEach-Object { $ccRow = [PSCustomObject]@{ 成本中心 = $_.Name } $_.Group | ForEach-Object { $ccRow | Add-Member -NotePropertyName "$($_.许可证类型)_数量" -NotePropertyValue $_.总用户数量 $ccRow | Add-Member -NotePropertyName "$($_.许可证类型)_总费用" -NotePropertyValue $_.该类型总费用 } $ccRow } # 4. 导出汇总结果 # 导出明细格式(每行对应成本中心+许可证的组合) $detailedSummary | Export-Csv -Path "C:\Accounting\License_Summary_Detailed.csv" -NoTypeInformation -Encoding UTF8 # 导出合并格式(每行对应一个成本中心) # $ccCombinedSummary | Export-Csv -Path "C:\Accounting\License_Summary_By_CC.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 列名适配:如果你的原始CSV中费用列名为
许可证费用,将代码中的单用户费用替换为对应名称即可 - 去重处理:如果原始数据存在重复用户记录,可在导入后添加去重逻辑,例如:
$rawData = $rawData | Select-Object 成本中心,许可证类型,单用户费用 -Unique - 精度控制:用
[math]::Round保留两位小数,避免浮点计算的精度问题 - 编码选择:使用
-Encoding UTF8确保导出的CSV在Excel中打开无乱码
输出格式说明
- 明细格式:适合查看每个成本中心下各许可证的具体统计,示例行:
成本中心 许可证类型 总用户数量 该类型总费用 1051080 Business Premium 10 1200.00 1051080 F3 5 250.00 - 合并格式:适合按成本中心整体查看,示例行:
成本中心 Business Premium_数量 Business Premium_总费用 F3_数量 F3_总费用 1051080 10 1200.00 5 250.00
内容的提问来源于stack exchange,提问作者theHappyOne
相关产品推荐
相关产品推荐

