PowerShell实现CSV提取每个ServiceTag最新EndDate并导出
解决方案:用PowerShell提取每个ServiceTag的最新保修记录
没问题,我来帮你写个简单的PowerShell脚本,轻松搞定这个需求!下面是完整步骤和代码:
核心思路
我们需要先把CSV文件导入PowerShell,然后按ServiceTag分组,每组里筛选出EndDate最晚的那条记录,最后导出成新的CSV文件。
完整脚本
# 替换成你实际的输入CSV文件路径 $inputPath = "C:\your\input\file.csv" # 替换成你想要的输出CSV文件路径 $outputPath = "C:\your\output\latest_warranty.csv" # 处理逻辑 Import-Csv -Path $inputPath | Group-Object -Property ServiceTag | ForEach-Object { # 对每组记录按EndDate降序排序,取第一条(最新的) $_.Group | Sort-Object -Property EndDate -Descending | Select-Object -First 1 } | Export-Csv -Path $outputPath -NoTypeInformation
代码解释
- 导入CSV:
Import-Csv会把你的CSV文件转换成PowerShell对象,每条记录就是一个对象,属性对应列名。 - 分组:
Group-Object -Property ServiceTag把相同服务编号的记录合并成一组,方便我们单独处理每个ServiceTag的所有记录。 - 筛选最新记录:
- 对每组内的记录用
Sort-Object -Property EndDate -Descending按保修结束日期倒序排列(最新的排在最前面)。 - 用
Select-Object -First 1取出排序后的第一条,也就是该ServiceTag的最新保修记录。
- 对每组内的记录用
- 导出CSV:
Export-Csv把处理后的结果保存成新的CSV文件,-NoTypeInformation参数会去掉PowerShell默认添加的类型信息行,让输出的CSV更干净。
注意事项
- 确保替换脚本里的
$inputPath和$outputPath为你实际的文件路径,路径里有空格的话要加引号。 - 如果你的日期格式在排序时出现异常(比如按字符串排序而非日期),可以修改排序部分的代码,强制把EndDate转换成日期类型:
$_.Group | Sort-Object -Property { [datetime]$_.EndDate } -Descending | Select-Object -First 1
用这个脚本处理你提供的示例数据,最终输出的CSV会是这样:
ServiceTag,StarDate,EndDate 2PONKFL,2017-09-13 02:00,2023-09-14 02:00 9LPYHUJ,2012-05-09 02:00,2020-05-09 02:00
内容的提问来源于stack exchange,提问作者Smarty13
相关产品推荐
相关产品推荐

