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

PowerShell中Select-Object -Unique如何取反,查找重复校验和

问题原因

  • 原代码中$HashesDouble = $arrDouble | Where-Object {$_.count -gt 1}的逻辑存在错误:管道传递到Where-Object的$_是数组中的单个校验和字符串,单个字符串的Count属性不代表该值在整个数组中的出现次数,因此判断条件永远不成立,无法筛选出重复条目。

筛选重复条目的实现方法

方法1:使用Group-Object(兼容性最佳,适配绝大多数场景)

直接对数组元素按值分组,筛选出元素数量大于1的分组即可得到重复项:

$arrDouble = "37B8525F4EE3571AA43F0F61C64060D5", "37B8525F4EE3571AA43F0F61C64060D5", "1E7100E795F6B84778EE0C6795AC8E32"
# 仅获取去重后的重复值(每个重复值仅返回1次,对应Select-Object -Unique的取反效果)
$HashesDouble = $arrDouble | Group-Object | Where-Object Count -gt 1 | Select-Object -ExpandProperty Name
# 如果需要保留所有重复的实例(比如示例中2条相同的校验和都返回),替换为下面的写法
# $HashesDouble = $arrDouble | Group-Object | Where-Object Count -gt 1 | Select-Object -ExpandProperty Group
$HashesDouble

运行后输出结果为重复的校验和:37B8525F4EE3571AA43F0F61C64060D5

方法2:使用哈希表统计次数(处理大量数据时效率更高)

通过哈希表统计每个值的出现次数,再筛选出次数大于1的值即可:

$arrDouble = "37B8525F4EE3571AA43F0F61C64060D5", "37B8525F4EE3571AA43F0F61C64060D5", "1E7100E795F6B84778EE0C6795AC8E32"
$hashCounter = @{}
$arrDouble | ForEach-Object { $hashCounter[$_]++ }
$HashesDouble = $hashCounter.Keys | Where-Object { $hashCounter[$_] -gt 1 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:04