PowerShell提取数据集每个唯一Key对应首个Value的问题求解
问题原因
你的原始代码存在两个问题:
- 匹配前缀的通配符逻辑错误:
-Like 'Item#'只能匹配完全等于Item#的Key,要匹配所有以Item#开头的Key需要写为-Like 'Item#*' Select-Object -Unique只会对你选中的字段做全局去重,无法把Key和对应的第一条Value做绑定,要么只能拿到去重后的Key列表,要么只能拿到全局去重后的Value列表,不符合按Key分组取首条的需求。
解决代码
按Key分组后取每组第一条记录的Value即可实现需求:
$CollectionTable.GetEnumerator() | Where-Object { $_.Key -Like 'Item#*' } | Group-Object Key | ForEach-Object { $_.Group[0].Value }
运行上述代码就会直接输出1、4、1的目标结果。
如果需要同时输出对应Key和首个Value,可以用以下写法:
$CollectionTable.GetEnumerator() | Where-Object { $_.Key -Like 'Item#*' } | Group-Object Key | ForEach-Object { [PSCustomObject]@{ 键名 = $_.Name 首次出现的值 = $_.Group[0].Value } }
逻辑说明
Group-Object Key会把所有记录按Key字段分组,相同Key的所有记录会被存入对应组的Group属性中,组的Name属性就是对应的Key值- 遍历每个组时
$_.Group[0]就是该Key第一条出现的原始记录,直接取它的Value属性就是你需要的结果
内容的提问来源于stack exchange,提问作者Aidage
相关产品推荐
相关产品推荐

