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

求助:编写PowerShell脚本搜索注册表REG_BINARY值并删除匹配项

PowerShell 搜索并处理注册表REG_BINARY值

实现思路

要搜索注册表中存储为REG_BINARY类型的目标字符串,核心步骤是:

  • 将目标字符串转换为注册表中对应的二进制编码(通常为UTF-16LE)
  • 遍历指定路径下的所有注册表值,逐一对比二进制数据

脚本示例

# 配置搜索参数
$regPath = "HKCU\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU"
$targetString = "E:\"

# 将目标字符串转为UTF-16LE编码的字节数组(匹配注册表中字符串转二进制的存储格式)
$targetBytes = [System.Text.Encoding]::Unicode.GetBytes($targetString)

# 遍历目标注册表路径下的所有值
Get-ItemProperty -Path "Registry::$regPath" | ForEach-Object {
    # 过滤掉PowerShell自带的属性,只处理注册表项的自定义值
    $_.PSObject.Properties | Where-Object { $_.Name -notmatch "^PS" } | ForEach-Object {
        $valueName = $_.Name
        $binaryData = $_.Value

        # 检查当前二进制值是否与目标字节数组完全匹配
        if ($binaryData -is [byte[]] -and (Compare-Object $binaryData $targetBytes -SyncWindow 0).Count -eq 0) {
            Write-Host "找到匹配项:值名称=$valueName,路径=$regPath"
            # 如需删除匹配项,取消注释下方代码
            # Remove-ItemProperty -Path "Registry::$regPath" -Name $valueName -Force
        }
    }
}

关键说明

  • 编码转换:注册表中字符串转REG_BINARY存储时,默认使用UTF-16LE(Unicode)编码,因此必须用[System.Text.Encoding]::Unicode.GetBytes()转换目标字符串,保证二进制格式匹配。
  • 二进制对比:使用Compare-Object对比字节数组,-SyncWindow 0参数确保两个数组的内容和顺序完全一致才判定为匹配。
  • 遍历逻辑:Get-ItemProperty获取注册表项的所有属性,通过过滤PS开头的属性(PowerShell内置属性),只处理实际的注册表值。
  • 删除操作:如果需要删除找到的匹配项,取消注释脚本中的Remove-ItemProperty行即可,-Force参数确保无需确认直接删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:50:40