首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序对象-Unique

排序对象-Unique
EN

Stack Overflow用户
提问于 2021-10-14 01:03:31
回答 2查看 197关注 0票数 1

我正在创建一个脚本,它收集来自特定位置的所有子项,并将REG_BINARY键转换为文本,但由于某些原因,我无法删除重复的结果或按字母顺序排序。

PS:不幸的是,我需要从命令行执行解决方案。

代码:

代码语言:javascript
复制
$List = ForEach ($i In (Get-ChildItem -Path 'HKCU:SOFTWARE\000' -Recurse)) {$i.Property | ForEach-Object {([System.Text.Encoding]::Unicode.GetString($i.GetValue($_)))} | Select-String -Pattern ':'}; ForEach ($i In [char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ') {$List = $($List -Replace("$i`:", "`n$i`:")).Trim()}; $List | Sort-Object -Unique

Test.reg

代码语言:javascript
复制
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\000\Test1]
"HistorySZ1"="Test1"
"HistoryBIN1"=hex:43,00,3a,00,5c,00,54,00,65,00,73,00,74,00,5c,00,44,00,2e,00,\
  7a,00,69,00,70,00,5c,00,00,00,43,00,3a,00,5c,00,54,00,65,00,73,00,74,00,5c,\
  00,43,00,2e,00,7a,00,69,00,70,00,5c,00,00,00,43,00,3a,00,5c,00,54,00,65,00,\
  73,00,74,00,5c,00,42,00,2e,00,7a,00,69,00,70,00,5c,00,00,00,43,00,3a,00,5c,\
  00,54,00,65,00,73,00,74,00,5c,00,41,00,2e,00,7a,00,69,00,70,00,5c,00,00,00


[HKEY_CURRENT_USER\SOFTWARE\000\Test2]
"HistorySZ2"="Test2"
"HistoryBIN2"=hex:4f,00,3a,00,5c,00,54,00,65,00,73,00,74,00,5c,00,44,00,2e,00,\
  7a,00,69,00,70,00,5c,00,00,00,43,00,3a,00,5c,00,54,00,65,00,73,00,74,00,5c,\
  00,43,00,2e,00,7a,00,69,00,70,00,5c,00,00,00,44,00,3a,00,5c,00,54,00,65,00,\
  73,00,74,00,5c,00,42,00,2e,00,7a,00,69,00,70,00,5c,00,00,00,41,00,3a,00,5c,\
  00,54,00,65,00,73,00,74,00,5c,00,41,00,2e,00,7a,00,69,00,70,00,5c,00,00,00
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-14 03:50:32

在字节数组中编码的路径字符串由NUL字符(代码点0x0)分隔。

因此,您需要将字符串按此字符拆分为单个路径数组,然后可以在该数组上执行诸如Sort-Object之类的操作。

您可以将NUL字符表示为可扩展的PowerShell字符串中的"`0",或者-在正则表达式中传递给-split operator - \0

代码语言:javascript
复制
# Convert the byte array stored in the registry to a string.
$text = [System.Text.Encoding]::Unicode.GetString($i.GetValue($_))

# Split the string into an *array* of strings by NUL.
# Note: -ne '' filters out empty elements (the one at the end, in your case).
$list = $text -split '\0' -ne ''

# Sort the list.
$list | Sort-Object -Unique
票数 1
EN

Stack Overflow用户

发布于 2021-10-14 03:49:43

经过多次尝试,我发现有必要使用拆分命令使行中断,从而能够组织结果。

代码语言:javascript
复制
{$List = ($List -Replace("$i`:", "`n$i`:")) -Split("`n")}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69563957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档