powershell 按属性分组自定义对象的数组列表

gblwokeq  于 2023-05-07  发布在  Shell
关注(0)|答案(2)|浏览(158)

我想根据字节对$mya的对象进行分组:

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

我试过了

$mya | Group-Object -Property Bytes

但我得到的结果很奇怪:

Count Name                      Group
----- ----                      -----
    3 {105, 109, 112, 111, 1... {@{Name=.\filedata.py; Bytes=System.Object[]}, @{Name=.\testfile.txt; Byte...

我不明白为什么我得到了这个结果。我认为管道从$mya中打开了所有对象,并根据它们所请求的属性Bytes对它们进行了分组。
我想要的结果是:

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

2admgd591#

Group-Object不能完全弄清楚如何处理字节数组值。
使用匿名属性表达式创建Group-Object可以从字节数组中有意义地比较的内容(例如 strings):

$mya | Group-Object -Property { [BitConverter]::ToString($_.Bytes) }
okxuctiv

okxuctiv2#

正如@MathiasR.Jessen在上面发布的那样,Group-Object读取的字节是类似的:

Count Name                      Group
----- ----                      -----
    1 .\filedata.py             {@{Name=.\filedata.py; Bytes=System.Object[]}}
    1 .\testfile.txt            {@{Name=.\testfile.txt; Bytes=System.Object[]}}
    1 .\copyfile.txt            {@{Name=.\copyfile.txt; Bytes=System.Object[]}}

Group下,名称不同,但字节似乎相同。将BytesArrayList转换为String

PS > $mya = [System.Collections.Arraylist]@{}
PS > foreach($file in $listofFiles) {$result = ($file | Get-Item | Get-Content -Encoding Byte -TotalCount 10) -Join ""; $mco = [PSCustomObject]@{Name=$file;Bytes=$result};$mya.Add($mco)}
0
1
2
PS > $mya

Name           Bytes
----           -----
.\filedata.py  1051091121111141163211297110
.\testfile.txt 100102115973210011810297115
.\copyfile.txt 100102115973210011810297115

PS > $mya | Group-Object -Property Bytes

Count Name                      Group
----- ----                      -----
    1 1051091121111141163211... {@{Name=.\filedata.py; Bytes=1051091121111141163211297110}}
    2 1001021159732100118102... {@{Name=.\testfile.txt; Bytes=100102115973210011810297115}, @{Name=.\copyf...

相关问题