You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Select-Object -Unique按单属性去重并显示多属性?

解决PowerShell筛选唯一DisplayName对象的问题

嗨,我来帮你搞定这个问题~

你遇到的情况很常见:用$objectArray | Select-Object DisplayName, LoginName, Url -Unique没达到预期,是因为PowerShell的-Unique参数会对比你指定的所有属性的组合——只要其中任何一个属性值不同,就会把这个对象判定为“唯一”并保留。所以哪怕DisplayName相同,LoginName或Url不一样,它还是会返回所有对象。

下面给你几种实用的解决方法:

方法1:用Group-Object分组后取每组首个对象

这是最直观的方式,先按DisplayName把对象分组,再从每个分组里选一个对象(这里选第一个,你也可以根据需求选最后一个或其他):

$objectArray | Group-Object -Property DisplayName | ForEach-Object { $_.Group[0] }

方法2:用Sort-Object + -Unique针对DisplayName去重

这个方法更简洁,Sort-Object的-Unique参数会只关注你指定的排序属性(也就是DisplayName),自动保留每个DisplayName的第一个出现的对象:

$objectArray | Sort-Object -Property DisplayName -Unique

方法3:自定义逻辑选择分组内的对象

如果需要更灵活的筛选(比如保留某个特定Url的对象,或者符合其他条件的),可以在分组后添加自定义判断:

$objectArray | Group-Object DisplayName | ForEach-Object {
    # 示例:优先保留Url包含"official"的对象,没有则取第一个
    $target = $_.Group | Where-Object { $_.Url -match 'official' }
    $target ? $target : $_.Group[0]
}

根据你的实际需求选对应的方法就好啦~

内容的提问来源于stack exchange,提问作者colonel_claypoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:11:44