PowerShell:查找自定义对象ArrayList中Jobname属性重复的对象
问题原因
你现有代码的问题出在分组逻辑嵌套错误,和ArrayList的使用无关:你用ForEach-Object遍历了每个自定义对象,又单独取出了每个对象的所有属性集合进行分组,相当于把每个自定义对象拆成了10个独立的属性对象再做匹配,自然无法按Jobname对原始自定义对象完成分组。
正确实现
按Jobname分组所有对象
直接对ArrayList的整体元素调用Group-Object,指定-Property为Jobname即可:
# 按Jobname完成分组,每个分组的Name属性为对应的Jobname值,Group属性为该Jobname下的所有原始对象 $jobGroups = $global:BackupJobObjectArray | Group-Object -Property Jobname
常用场景示例
- 查看所有Jobname的统计信息
$jobGroups | Format-Table Name, Count -AutoSize
- 筛选出所有存在重复的Jobname对应的对象(分组内元素数>1)
$duplicateJobs = $jobGroups | Where-Object Count -gt 1 | Select-Object -ExpandProperty Group
- 提取指定Jobname(比如
jobname16)对应的所有对象
$job16List = $jobGroups | Where-Object Name -eq 'jobname16' | Select-Object -ExpandProperty Group
内容的提问来源于stack exchange,提问作者ddl
相关产品推荐
相关产品推荐

