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

PowerShell按Bytes属性分组自定义对象异常,求正确实现方法

解决PowerShell按字节数组属性分组异常的问题

问题原因

你遇到的问题核心是:Group-Object默认将数组类型(System.Object[])当作引用类型进行比较。哪怕两个数组的字节内容完全一致,它们在内存中的引用地址不同,就会被判定为不同的分组键,最终导致所有对象被分到同一组。

解决方案

要实现按字节数组的内容分组,需要将数组转换为能体现内容唯一性的标量类型(比如字符串、哈希值)作为分组依据,具体有两种常用方式:

方式1:将字节数组转为字符串(简单高效)

通过脚本块把Bytes数组转成逗号分隔的字符串,内容相同的数组会生成完全一致的字符串,从而正确分组:

# 基础分组命令
$mya | Group-Object -Property { $_.Bytes -join ',' }

如果需要让输出格式和你预期的完全匹配(Name列显示原数组样式,Group列只显示文件名),可以再加工输出对象:

$mya | Group-Object -Property { $_.Bytes -join ',' } | ForEach-Object {
    [PSCustomObject]@{
        Count = $_.Count
        Name  = $_.Group[0].Bytes
        Group = $_.Group.Name
    }
}

方式2:计算字节数组的哈希值(适合大数组)

如果字节数组长度很大,转字符串可能占用过多内存,可以计算数组内容的哈希值作为分组键:

$mya | Group-Object -Property { 
    $hashProvider = [System.Security.Cryptography.SHA256]::Create()
    [BitConverter]::ToString($hashProvider.ComputeHash($_.Bytes))
} | ForEach-Object {
    [PSCustomObject]@{
        Count = $_.Count
        Name  = $_.Group[0].Bytes
        Group = $_.Group.Name
    }
}

预期输出效果

执行上述加工后的命令,会得到你期望的结果:

Count Name                        Group
----- ----                        -----
    1 {105, 109, 112, 111, ...}   {.\filedata.py}
    2 {100, 102, 115, 97, ...}    {.\testfile.txt, .\copyfile.txt}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:02:20