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

PowerShell处理注册表REG_BINARY时Sort-Object -Unique无法去重排序怎么解决

PowerShell注册表REG_BINARY转文本并排序去重方案

问题根因

原有脚本的核心问题是:替换逻辑生成的是带换行的单个字符串对象,而非每条路径独立的字符串数组,Sort-Object -Unique无法识别单条路径边界,自然无法实现去重和按字母排序的效果。同时没有过滤REG_BINARY类型的键,遇到其他类型的键值时会出现转码异常。

可直接命令行执行的修正代码

& { $paths = @(); Get-ChildItem -Path 'HKCU:SOFTWARE\000' -Recurse | ForEach-Object { $regKey = $_; $regKey.Property | ForEach-Object { $val = $regKey.GetValue($_); $type = $regKey.GetValueKind($_); if ($type -eq 'Binary') { [System.Text.Encoding]::Unicode.GetString($val) -split "`0" | Where-Object { $_ -match ':' -and $_ } | ForEach-Object { $paths += $_.Trim() } } } }; $paths | Sort-Object -Unique }

逻辑说明

  • 仅过滤REG_BINARY类型的键值处理,避免非二进制值报错
  • 转码后直接按Unicode字符串的结束符\0分割多路径,比逐字母匹配盘符的替换逻辑更稳定
  • 所有路径存入统一数组后再调用Sort-Object -Unique,可正确实现去重+字母升序排序

测试验证

导入提供的Test.reg后执行上述代码,输出结果如下:

A:\Test\A.zip\
C:\Test\A.zip\
C:\Test\B.zip\
C:\Test\C.zip\
C:\Test\D.zip\
D:\Test\B.zip\
O:\Test\D.zip\

完全符合去重、按字母排序的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:30:03